当前位置: 代码迷 >> 综合 >> test11_1226(逻辑运算、打印杨辉三角)
  详细解决方案

test11_1226(逻辑运算、打印杨辉三角)

热度:35   发布时间:2023-12-17 01:44:35.0

 1.
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次

if(120 == a*b*c*d*e)因为五人名次不同,所以可以直接这样筛选,也可以用for循环或者if语句筛选重复名次

void ranking() {int a, b, c, d, e;//用1、2、3、4、5分别表示名次,对五名选手所有的排名可能性进行遍历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++) {//每个选手都说对了一半,用p表示前半句,q表示后半句// 那么,可以设定逻辑运算: p + q == 1;// 然后,将所有选手的话全部&&起来if (((b == 2) + (a == 3)) && ((b == 2) + (e == 4))&& ((c == 1) + (d == 2)) && ((c == 5) + (d == 3))&& ((e == 4) + (a == 1))) {//  每个选手只能占据一个名次,即:五个选手加一起为1+2+3+4+5 = 120if (120 == a * b * c * d * e) {printf("a=%d b=%d c=%d d=%d e=%d\n", a, b, c, d, e);return;}}}}}}}
}
int main() {ranking();system("pause");return 0;
}

2.日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个
嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
 


void Iskiller() {int killer;// 对A、B、C、D四名嫌疑人分别进行凶手假设,凶手只能有一个for (killer = 'A'; killer <= 'D'; killer++) {// 3个人说了真话,1个人说了假话。// 将四个人的话进行逻辑加运算,设定结果等于 3if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3) {printf("凶手是: %c\n", (int)killer );}}
}
int main() {Iskiller();system("pause");return 0;
}

 3.在屏幕上打印杨辉三角。
1
1 1
1 2 1
1 3 3 1

在第32列时候,int型的数组变量, 值就会溢出。

#define M 100
#define N 100
int main() {// 定义一个二维数组a[1024][1024]int arr[M][N] = { 0 };int i, j;// 第0列全为1for (i = 0; i < M; i++) {arr[i][0] = 1;}// 从第一行,第1列开始// 每个元素为 '上一行' 的    '同列'元素   与    '前一列'元素    之和// 即:a[i][j] = a[i - 1][j - 1] + a[i - 1][j]for (i = 1; i < M; i++) {for (j = 1; j < i + 1; j++) {arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];	}}//打印数组for (i = 0; i < M; i++) {for (j = 0; j < N; j++) {printf("%d\t", arr[i][j]);}printf("\n");}system("pause");return 0;
}