算法OJ—九鼎之尊

九鼎之尊(一)

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

夏朝初年,夏王大禹划分天下为九州,令九州州牧贡献青铜,铸造九鼎,将全国九州的名山大川、奇异之物镌刻于九鼎之身,以一鼎象征一州。这样,九州就成为中国的代名词。九鼎成了王权至高无上、国家统一昌盛的象征。
周幽王烽火戏诸侯之后,周王室的地位快速下降,到了周赧(nǎn)王时期,天子的地位已大不如前,只是名义上的统治者了。秦武王想取而代之,周赧王说:这里有九个鼎,咱俩数鼎,每次可以数一个或者两个,谁数到最后那个“龙文赤鼎”并且把它举起来谁得天下,秦武王很高兴,就与周赧王开始数鼎。实际上周赧王知道最后那个龙文赤鼎铸造时用了很多黄金,实际重量比其它的重很多,秦武王根本就不可能举起来。秦武王霸道的说我先数:1、2,周王:3、4,秦王:5、6,周王:7、8,秦王:9。按游戏规则,秦王获得了举鼎资格。世事难料,秦王居然把鼎举起来了,但是由于“龙纹赤鼎”太重了,举起来已经受了内伤,又被鼎砸伤胫骨,当晚气绝身亡。请叙述周王心理变化过程。

输入:

输入鼎的个正整数n。

输出:

假设双方都足够聪明,不会有失误,谁数到最后一个数谁输,如果先数可以必胜则输出“Yes”,否则输出“No”。

输入样例:

6

输出样例:

Yes

刚开始做本题时候觉得无从下手,反复思考理解题意,通过在手算模拟了几遍游戏的过程,理解了游戏的真正规则:

发现是以3为周期的一个循环,由此只要鼎的个数是是3的整数倍则先数数的必胜,由此转化为程序语言描述即为:

#include<iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    if((n-1)%3 == 0){
        cout << "No" << endl;
    }else{
        cout << "Yes" << endl;
    }
}

九鼎之尊(二)

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

秦人雄视天下之心,由来已久,秦武王死后,秦昭襄王即位,励精图治,继续扩张,多年之后已经具备了统一天下的实力,周赧王对秦昭襄王说:这里有n个鼎(1≤n≤100),咱俩轮流数鼎,谁数到最后一个鼎谁做天子(这次不用举鼎:-D),要求每次数的数量必须是1、2和4这三个数字之一。你能否写一个程序帮秦昭襄王算一下,要想取得胜利应该先数还是后数?

输入:

输入一个正整数n。

输出:

如果先数必胜则输出“Yes”,否则输出“No”。

输入样例:

6

输出样例:

No

此题与上题类似,同样是通过找出题中规律即可得出答案:

#include<iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    if(n%3 == 0 ){
        cout << "No" << endl;
    }else{
        cout << "Yes" << endl;
    }

}
发布了15 篇原创文章 · 获赞 15 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/gcoder_/article/details/82734284