小型手机网站建设多少钱磁力搜索引擎下载
题目1.
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第一,我第三。
B选手说:我第二,E第四。
C选手说:我第一,D第二。
D选手说:C最后,我第三。
E选手说:我第四,A第一。
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
算法思路:这种方法就是用5个for循环将每个人可能1-5名次遍历,根据结果要求每个人各说对一半为条件,得到结果,但是注意处理那种名次不连续情况的方法
注意:
(1)可以有重名次,但是这几个名次数字要连续,而且是从1开始
#include <stdio.h>
int main()
{int a=0,b=0,c=0,d=0,e=0,ret=0;//遍历每个人的可能名次for(a=1;a<=5;a++){for(b=1;b<=5;b++){for(c=1;c<=5;c++){for(d=1;d<=5;d++){for(e=1;e<=5;e++){if(((b==1)+(a==3)==1) //根据结果每个人说对一半设为筛选条件&&((b==2)+(e==4)==1)&&((c==1)+(d==2)==1)&&((c==5)+(d==3)==1)&&((e==4)+(a==1)==1)){int ret=0;ret|=(1<<(a-1)); //将有名次的位数置1,判断名次是否连续,以下类似ret|=(1<<(b-1));ret|=(1<<(c-1));ret|=(1<<(d-1));ret|=(1<<(e-1));while(ret) //只要ret不为0,说明有名次存在,循环不停止{if(ret%2==0)break;ret=ret/2;}if(ret==0) //while循环跳出来有2种情况,如果是break跳出来的,ret不为0,说明存在不连续名次,//若ret==0跳出说明名次连续{printf("%d %d %d %d %d\n",a,b,c,d,e);}}}}}}}return 0;
}
输出结果:2 1 1 3 4
题目2.
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
算法思路:根据 a-d的ASCII码依次递增,可以利用for循环对杀手可能性遍历,然后根据最后结果条件输出满足条件结果
#include <stdio.h>
int main()
{char killer=0;for(killer='a';killer<='d';killer++){if((killer!='a')+(killer=='c')+(killer=='d')+(killer!='d')==3){printf("%c",killer);}}return 0;
}
输出结果:killer为c