#include<stdio.h>
//1.杨辉三角
//在屏幕上打印杨辉三角。
//1
//1 1
//1 2 1
//1 3 3 1
void YHTri(int n)
{
//首先初始化为1,以为第一行为1
int data[30][30] = { 1 };
//从第二行开始打印
for (int i = 1; i < n; i++)
{
//第一列永远为1
data[i][0] = 1;
for (int j = 1; j <= i; j++)
{
data[i][j] = data[i - 1][j - 1] + data[i - 1][j];
}
}
//打印
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
printf("%d ",data[i][j]);
}
printf("\n");
}
}
void YHTri2(int n)
{
int data[30] = { 1 };
printf("1\n");
for (int i = 1; i < n; i++)
{
for (int j = i; j > 0; j--)
{
data[j] += data[j - 1];
}
for (int j = 0; j <= i; j++)
{
printf("%d ", data[j]);
}
printf("\n");
}
}
//2.猜凶手
//日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
//以下为4个嫌疑犯的供词
//A说:不是我。
//B说:是C。
//C说:是D。
//D说:C在胡说
//已知3个人说了真话,1个人说的是假话。
//现在请根据这些信息,写一个程序来确定到底谁是凶手。
void Guess()
{
//假设四人都不是凶手
int murder[4] = { 0 };
int i;
//遍历四个人的话
for (i = 0; i < 4; i++)
{
//假设某人是凶手
murder[i] = 1;
//满足条件就是你了
if ((murder[0] != 1) + (murder[2] == 1) + (murder[3] == 1) + (murder[3] != 1) == 3)
{
break;
}
//不满足还他清白
murder[i] = 0;
}
//输出谁是凶手
putchar('A'+i);
}
//3.猜名次
//5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
//A选手说:B第二,我第三;
//B选手说:我第二,E第四;
//C选手说:我第一,D第二;
//D选手说:C最后,我第三;
//E选手说:我第四,A第一;
//比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
int CheckData(int *p)
{
//构造哈希标记表
int tmp[7] = { 0 };
int i = 0;
for (i = 0; i < 5; i++)
{
if (tmp[p[i]])
{
return 0;
}
tmp[p[i]] = 1;
}
return 1;
}
int main()
{
//5.定义选手数组
int p[5];
//遍历5名选手的名次,每一名都是从1~5,总共有5^5种情况
for(p[0]=1;p[0]<=5;p[0]++)
for(p[1]=1;p[1]<=5;p[1]++)
for(p[2]=1;p[2]<=5;p[2]++)
for(p[3]=1;p[3]<=5;p[3]++)
for (p[4] = 1; p[4] <= 5; p[4]++)
{
//每个人50%的概率用||运算
//这里是五个人的描述,由于比较表达式只有0和1两个结果,如果要两个条件有且只有一个为真,则可以用比较表达式的值总和为1的方式直接判定。别忘了还要判定不能并列。
if ((p[1] == 2) + (p[0] == 3) == 1 && //B第二,我第三
(p[1] == 2) + (p[4] == 4) == 1 && //我第二,E第四
(p[2] == 1) + (p[3] == 2) == 1 && //我第一,D第二
(p[2] == 5) + (p[3] == 3) == 1 && //C最后,我第三
(p[4] == 4) + (p[0] == 1) == 1 && //我第四,A第一
CheckData(p) //不能并列
)
{
//如果满足以上条件,判断是否出现并列情况
for (int i = 0; i < 5; i++)
{
printf("p[%d]=%d\n", i, p[i]);
}
}
}
2.
//Guess();
/*int n = 4;
YHTri2(4);*/
return 0;
}
踩坑总结:第三题排名次,第一次使用||操作符来实现每人50%概率,由于逻辑运算操作符只要有一个不满足,后面都不执行,因此出现错误。所以用(a+b)==1来实现更稳定。