五人预测比赛结果均答对一半,求比赛名次
2015-10-18 16:02
309 查看
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第一,我第三。
B选手说:我第二,E第四。
C选手说:我第一,D第二。
D选手说:C最后,我第三。
E选手说:我第四,A第一。
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
此题没说没有并列情况,所以我们要考虑到并列第几的情况,也要考虑到跨名次情况(即没有1就有2、3、4、5等)。首先假设D选手说的“C最后”认为为C是第五,然后对于存在并列第几情况的问题,引进二进制。通过将1(0001)移位,再与0(0000)进行或运算,最后判断最终得到的二进制数中有没有0,存在0,则说明有跨名次的情况;不存在0,则得到满足题意正确的比赛名次。
代码如下:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
代码如下:
A选手说:B第一,我第三。
B选手说:我第二,E第四。
C选手说:我第一,D第二。
D选手说:C最后,我第三。
E选手说:我第四,A第一。
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
此题没说没有并列情况,所以我们要考虑到并列第几的情况,也要考虑到跨名次情况(即没有1就有2、3、4、5等)。首先假设D选手说的“C最后”认为为C是第五,然后对于存在并列第几情况的问题,引进二进制。通过将1(0001)移位,再与0(0000)进行或运算,最后判断最终得到的二进制数中有没有0,存在0,则说明有跨名次的情况;不存在0,则得到满足题意正确的比赛名次。
代码如下:
#include<stdio.h> #include<stdlib.h> int main() { int a,b,c,d,e,val,flag; for(a=1;a<6;a++) {for(b=1;b<6;b++) {for(c=1;c<6;c++) {for(d=1;d<6;d++) {for(e=1;e<6;e++) {if((1==(b==1)+(a==3))&&(1==(b==2)+(e==4))&& (1==(c==1)+(d==2))&&(1==(c==5)+(d==3))&& (1==(e==4)+(a==1))) /*当a=3;将1(0001)左移2位变为0100(有第三),a再和0000进行或运算(|)就得到0100*/ { val=0; flag=1; val|=(1<<(a-1)); val|=(1<<(b-1)); val|=(1<<(c-1)); val|=(1<<(d-1)); val|=(1<<(e-1)); while(val) { if(val%2==0) { flag=0; } val/=2; } if(flag==1) { printf("a=%d b=%d c=%d d=%d e=%d\n",a,b,c,d,e); } } } } } } } system("pause"); return 0; }小游戏:日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
代码如下:
#include<stdio.h> #include<stdlib.h> int main() { int killer=0; for(killer='a';killer<'e';killer++) { if(3==(killer!='a')+(killer=='c')+(killer=='d')+(killer!='d')) /*3人说真话,1人说假话的逻辑表示*/ { printf("killer is %c",killer); } } system("pause"); return 0; }
相关文章推荐
- 三次逆序实现数组的循环移位
- Java 位运算(移位、位与、或、异或、非)
- 意外的结果-C++中的移位操作
- Divide Two Integers
- 运算符和两数的交换
- C++移位与类型提升
- 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。
- 编程之美 2.17 数组循环移位
- 编程之美 1.2 中国象棋将帅问题
- leetcode:Divide Two Integers
- 剑指offer:二进制中1的个数
- 数组循环移位(左旋转字符串)
- JAVA 移位
- java移位运算符以及其他运算符的操作
- 字符串移位包含的问题
- 运算符优先级问题
- AVR移位算法详细解释
- 移位
- 0919_C/C++笔试题_3:::内存分配
- 编程之美 2.17 数组循环移位