守护骑士和远征骑士

B-骑士的对决

http://www.nowcoder.com/questionTerminal/ba5a580a67a44a1d919ea02e312090c8

  • 骑士的对决题解

守护骑士可以有两个武器,远征骑士只有一个武器,因为武器是平等的,并且相互克制,我们发现守卫骑士在有两个武器的情况下是不可能输的,因为守护骑士是不想输的,所以结果肯定是守护骑士赢远征骑士或者守护骑士和远征骑士平局.

//第一种写法,以守护骑士为视角,将全部的结果罗列出来.比较长
#include<iostream>
using namespace std;

int main () {
    char a, b;
    cin >> a >> b;
    char c;
    cin >> c;
    if ((a == 'S' && b == 'J')|| (a == 'J' && b == 'S')) {
        if (c == 'B')
            cout << "pmznb" << endl;
        if (c == 'S')
            cout << "lyrnb"<< endl;
        if (c == 'J')
            cout << "pmznb" << endl;
    }
     if ((a == 'B' && b == 'J')|| (a == 'J' && b == 'B')) {
        if (c == 'B')
            cout << "pmznb" << endl;
        if (c == 'S')
            cout << "pmznb" << endl;
        if (c == 'J')
            cout << "lyrnb"<< endl;
    }
     if ((a == 'S' && b == 'B')|| (a == 'B' && b == 'S')) {
        if (c == 'B')
            cout << "lyrnb"<< endl;
        if (c == 'S')
            cout << "pmznb" << endl;
        if (c == 'J')
            cout << "pmznb" << endl;
    }
    return 0;
}

第二种:

//第二种,代码比较.
#include<iostream>
using namesapce std;
int main()
{
    char a,b,c;
    cin >> a >> b;
    cin >> c;
    if(c=='S'&&(a=='B'||b=='B'))
        printf("pmznb");
    else if(c=='J'&&(a=='S'||b=='S'))
        printf("pmznb");
    else if(c=='B'&&(a=='J'||b=='J'))
        printf("pmznb");
    else 
        printf("lyrnb"); 
}
全部评论
守卫骑士不会输??? 在输入条件里只有a≠b一种限制,也就是说存在a=c或者b=c的情况(平局),题目中不是明确指出了守卫骑士限制自己仅在两种武器中选用一个吗?假如此时守卫骑士选择了一种会造成平局的武器和一种会输的武器,并且选择了会输的武器,那决斗的结果不就是输或者平局了?“不想输”的含义不应该是保证平局吗?这什么鬼解释???
点赞 回复 分享
发布于 2019-12-08 21:56
三种武器是相互平等的相互克制,是一个单方向的克制圈,因此取任意的两个武器都是等价的,剩下的武器一定是会被这两个武器的其中 之一克制的,所以远征骑士的最好情况就是拿到一个武器,和守护骑士手中的一个武器相同,而不被守护骑士手中的另一个武器克制,这 种情况也就是平局的情况。剩下的情况远征骑士都会输。
点赞 回复 分享
发布于 2019-12-09 21:11

相关推荐

应届生腾讯校招提前实习是不是100%薪资?
宝你的offer真好看:好像实习 6 个月还算工龄
投递腾讯等公司10个岗位 >
点赞 评论 收藏
分享
与火:这不接? 留子的钱不挣白不挣
点赞 评论 收藏
分享
09-20 09:17
已编辑
中国矿业大学 机械设计师
大连理工大学机械工程师:拖拉机研究院1.5
点赞 评论 收藏
分享
7 收藏 评论
分享
牛客网
牛客企业服务