- 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
分析题目条件,可以知道A,B,C,D,E都可以取五种状态,即第一、第二、第三、第四、第五,在程序中用1,2,3,4,5来表示,首先可以利用for循环将五名选手的所有可能都表示出来,再利用if条件语句,将所有人说的话进行条件判断从而得到结果。这种方法的代码如下:
#include <stdio.h>
#include <stdlib.h>
int main() {
int a,b,c,d,e;
//利用for循环将五名选手可能的比赛名次都表示出来
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语句将五名选手所说的情况进行判断
if((b==2&&a!=3)||(b!=2&&a==3)) {
if((b==2&&e!=4)||(b!=2&&e==4)) {
if((c==1&&d!=2)||(c!=1&&d==2)) {
if((c==5&&d!=3)||(c!=5&&d==3) {
if(e==4&&a!=1)||(e!=4&&a==1) {
//判断a,b,c,d,e的顺序,即a,b,c,d,e互不相等,且相乘为120
if(a*b*c*d*e==120) {
printf("a=%d b=%d c=%d d=%d e=%d\n",a,b,c,d,e);
}
}
}
}
}
}
}
}
}
}
}
system("pause");
return 0;
}
上述代码中利用了多个for循环和if语句,代码结构及其复杂繁琐,并且在if条件语句中,极容易将等于写成=,导致代码出错。不建议使用上述代码上述代码。
我们可以再对本题进行细致的分析,可以发现a的值只能取1或3,c的值只能取1或5,d的值只能取2或3。得到了这些条件后,再进行逻辑分析,可以发现当e!=4时,a取1,否则a取3;当a等于2,d取2,否则d取3;当d==2时,c取5,否则c取1。这样对条件进行梳理,就简化了代码的量,结合上述条件,利用以下代码即可实现:
#include <stdio.h>
#include <stdlib.h>
int main() {
int b = 0;
int e = 0;
for(b=1;b<6;++b) {
for(e=1;e<6;++e) {
int a = e != 4 ? 1 : 3;
int d = a == 3 ? 2 : 3;
int c = d == 2 ? 5 : 1;
if(a*b*c*d*e==120) {
printf("a=%d b=%d c=%d d=%d e=%d\n");
}
}
}
system("pause");
return 0;
}
- 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个
嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
先进行逻辑分析,从四个嫌疑犯的话中,可知A、B不是凶手,凶手在C、
#include <stdio.h>
#include <stdlib.h>
int main() {
//假设好人说的话为0 凶手说的话为1
int b = 0;
//B说的话有真假两种情况
for(b=0;b<2;++b) {
int a = 0; //A说的是真的
int c = b == 0 ? 1 : 0;//如果B说的是对的,那C是凶手,反之C不是凶手
int d = c == 0 ? 1 : 0;//如果C说的是对的,那D是凶手,反之D不是凶手
if(a+b+c+d==1) { //条件判断 三个好人,一个凶手 和为1
printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);
}
}
system("pause");
return 0;
}
运行结果:
- 在屏幕上打印杨辉三角。
1
1 1
1 2 1
1 3 3 1
#include <stdio.h>
#include <stdlib.h>
#define n 10
int arr[n][n];
int main() {
int i,j;
for(i=0;i<n;++i)
for(j=0;j<=i;++j) {
if(i==0||i==j) {
arr[i][j] = 1;
printf("%d ",arr[i][j]);
printf("\n");
}
else {
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
printf("%d ",arr[i][j]);
}
}
system("pause");
return 0;
}
运行结果: