1.猜凶手问题
具体代码实现如下:
//猜凶手
/*
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个
以下为四个嫌疑犯的供词:
A说:不是我;
B说:是C
C说:是D
D说:C在胡说
已知3个人说了真话,1个人说的是假话
现在请根据这些信息,写一个程序来确定到底谁是杀手
*/
int main(){
int killer = 'a';
for (killer = 'a'; killer <= 'd';killer++){
if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3){
printf("凶手是:%c\n", killer);
}
}
return 0;
}
2.猜名次问题
具体代码实现如下:
//猜名次:5位运动员参加了10米跳水比赛,有人让他本预测比赛结果:
/*
A选手说:B第二,我第三
B选手说:我第二,E第三
C选手说:我第一,D第二
D选手说:C最后,我第三
E选手说:我第四,A第一
比赛结束后,每位选手都说对了一半,请编确定比赛名次
*/
int main(){
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 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 == 2) + (a == 3) == 1)&&
((b == 2) + (e == 4)== 1)&&
((c == 1) + (d == 2) == 1)&&
((c == 5) + (d == 3) == 1)&&
((e == 4) + (a == 1) == 1)){
if (a * b * c * d* e == 120){
printf("a = %d b = %d c = %d d = %d e = %d\n",a,b,c ,d,e);
}
}
}
}
}
}
}
return 0;
}
3.喝汽水问题
喝汽水,1瓶汽水1元钱,2个空瓶可以换1一瓶汽水,给20元,问可以喝到多少瓶汽水。 39瓶
具体代码实现如下:
//喝汽水问题
//喝汽水,1瓶汽水1元钱,2个空瓶可以换1一瓶汽水,给20元,问可以喝到多少瓶汽水。 39瓶
int main(){
int money =0;
int total = 0;
int empty = 0;
printf("请输入您的钱数:");
scanf("%d", &money);
//解法1
if (money == 0){
total = 0;
}
else{
total = money * 2 - 1;
}
/*
//解法2
total += money; //买的汽水
empty = money;
while (empty >= 2){
total += empty / 2; //换回来的汽水,喝掉了
empty = empty / 2 + empty % 2; //计算手里的空瓶
}
*/
printf("可以喝到的汽水数total= %d\n",total);
return 0;
}
4.烧香问题:有两根不均匀分布的香,每根香烧完的时间是1个小时,请用两根香确定一段15分钟的时间
解题思路:从香的两端开始点燃,可确定一段30分钟的而时间
一根香燃烧的总时间是60分钟,可以用另一根香先确定30分钟,
然后再把另一根香的两头都点燃,则此时再燃烧完就正好是15分钟了
同时点两头就是半小时烧完
具体步骤:
点燃第一根香的两端和第二根香的一段;
等第一根香燃尽以后,把第二根香的另一端点燃,
从第一根香燃尽开始算起,知道第二根香燃尽,正好是15分钟