今天分享一个for循环经典趣味题:
1.谁是跳水第一名
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
for (int A = 1; A <= 5; A++)
{
for (int B = 1; B <= 5; B++)
{
for (int C = 1; C <= 5; C++)
{
for (int D = 1; D <= 5; D++)
{
for (int E = 1; E <= 5; E++)
{
if (((B == 2 && A != 3) || (B != 2 && A == 3)) && ((B == 2 && E != 4) || (B != 2 && E == 4)) && ((C == 1 && D != 2) || (C != 1 && D == 2))
&& ((C == 5 && D != 3) || (C != 5 && D == 3)) && ((E == 4 && A != 1) || (E != 4 && A == 1))&&(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;
}
解释下因为A,B,C,D,E五个人所以针对有有5*4*3*2*1=120种情况里的一种所以需要五层循环,if判断条件根据题中所给条件来确定,每个人都有一句真话,一句假话,所以如上面代码所写的那样,要么前半句真要么后半句真,然后是所有人说的话的情况和的与,以及一个最后的120种情况限定的筛选。
2.谁是凶手
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个
嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
char killer;
for (killer = 'A'; killer <= 'D'; killer++)
{
if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)
printf("killer = %c\n",killer);
}
system("pause");
return 0;
}
这个问题因为是四个人中找一个凶手所以一层循环就够了,根据题意有三个人说了真话,一个说了假话,所以用或的关系连接四个人所说的话结果应该返回3,因为有三个真值。代码一开始就是用字符比较好,如果显示用整形后面转换为字符型的话,还要加上64,如果有一天ASCII码表变了的话上面那个方法的代码就得变,显得很不方便,所以我选用一开始就是用字符表示。
3.输出杨辉三角
#define _CRT_SECURE_NO_WARNINGS
#include
#include
void triangle(int n)
{
int a[100][100];
for (int i = 0; i < n; i++)
{
a[i][0] = 1;
a[i][i] = 1;
}
for (int i = 2; i < n; i++)
{
for (int j = 1; j < i; j++)
{
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
}
int main()
{
int n;
printf("请输入行数:\n");
scanf("%d",&n);
triangle(n);
system("pause");
return 0;
}
杨辉三角主要是要观察他的每行及列的规律然后用for循环就比较简单了,因为第一列以及每行的最后一列都是1,所以开始用for循环直接赋值为1,然后从第三行开始,以及第二列往后到最后一列以前的每个数都是他上一行的数和上一行前一列的数之和。