一.5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
1.先把各选手的话用逻辑表达式写出。
b = 2 || a = 3
b = 2 || e = 4
c = 1 || d = 2
c = 5 || d = 3
e = 4 || a = 1
2.A~E都有1-5的可能,全部罗列出来。
3.判断师是否符合每位选手都说对了一半.
4.判断名次是否有重复(我用判断1,2,3,4,5是否都有人来确定是否有重复).
#include<stdio.h>
#include<stdlib.h>
//判断名次是否有重复
int check_5(int a, int b, int c, int d, int e){
for (int i = 1; i < 6; i++){
if (i != a &&i != b &&i != c && i != d && i != e){
return 0;
}
}
return 1;
}
int main(){
//罗列出所有情况
for (int a = 1; a < 6; a++){
for (int b = 1; b < 6; b++){
for (int c = 1; c < 6; c++){
for (int d = 1; d < 6; d++){
for (int e = 1; e < 6; e++){
//判断说对一半
if ((2 == b && 3 != a) || (2 != b && 3 == a)){
if ((2 == a && 4 != e) || (2 != b && 4 == e)){
if ((1 == c && 2 != d) || (1 != c && 2 == d)){
if ((5 == c && 3 != d) || (5 != c && 3 == d)){
if ((4 == e && 1 != a) || (4 != e && 1 == a)){
//最终判断
if (check_5(a, b, c, d, e) == 1){
printf("a=%d,b=%d,c=%d,d=%d,e=%d\n"
, a, b, c, d, e);
}
}
}
}
}
}
}
}
}
}
}
system("pause");
return 0;;
}
二.日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个
嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main(){
//用0表示不是罪犯1表示是罪犯
//则A:A=0
//B:C=1
//C:D=1
//D:D = 0且三人为真,一人为假
//初始化没人犯罪
//用二维数组储存,a[][0]是名称,a[][1]是是否犯罪
char a[4][2] = { { 'A', '0' }, { 'B', '0' }, { 'C', '0' }, { 'D', '0' } };
//轮流是罪犯。看哪个符合
for (int i = 0; i < 4; i++){
a[i][1] = '1';
//符合的话输出
if ((a[0][1] == '0') + (a[2][1] == '1') + (a[3][1] == '1') + (a[3][1] == '0') == 3){
printf("%c是罪犯\n", a[i][0]);
break;
}
//不符合的话将其在归0,为了下次判断
a[i][1] = '0';
}
system("pause");
return 0;
}
三.在屏幕上打印杨辉三角。
1.先建了一个一维数组全部为0,然后使中间的为1。(第一列与最后一列不看,纯用来加)
2.从第1列到倒数第二列的数,先用一个数把这个数保存下来,然后这个数等于前一个数(保存的数)加后一个数。
3.循环n次。(输出n行,输出时,0为 空格)如:n=5
00000100000
00001010000
00010201000
00103030100
01040604010
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ROW 100
//打印一行杨辉三角
void print_arr(int n, int* arr){
for (int row = 1; row <= 2 * n+1; row++){
if (arr[row] == 0){
printf(" ");
continue;
}
printf("%4d", arr[row]);
}
printf("\n");
}
//打印N行杨辉三角
void print(int n,int temp,int *arr){
int num1 = 0;
int num2 = 0;
while (temp!=-1){
print_arr(n, arr);
for (int col = 1; col <= 2 * n + 1; col++){
num2 = arr[col];
arr[col] = num1 + arr[col + 1];
num1 = num2;
}
temp--;
}
}
int main(){
int n;
int arr[ROW] = {0};
printf("请输入要打印几行杨辉三角:");
scanf("%d", &n);
arr[n + 1] = 1;
int temp = n;
print(n, temp, arr);
system("pause");
return 0;
}