哈喽哈喽大家好,今天和大家分享的是,用C语言完成逻辑判断的问题和打印杨辉三角.
目录
一、5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
一、5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
看到这个问题的时候大家是不是懵懵的,啊这...
不要慌不要慌,我们一起来解决吧!
我相信如果让大家自己动手算一算,肯定都能够得到ABCDE的名词,不就是如果...就...的过程吗
想到如果,大家就会想到编程语句if咯.
那A.B.C.D.E的值怎么办呢?
我们用到的是for循环,一共用了5层(看着很吓人,其实很简单),通过循环其实完成了一个排列组合的过程也就是说A.B.C.D.E均有五种可能,那一共就有5的五次幂种可能.
当然当然,我们最后要的只有一种,if语句闪亮登场.
要满足半句话是真的,我们可以想到如果判断是真假,真就是1,假就是0,那我们就可以做出如下代码的操作,一句话只有半句是真的,那就半句0半句1咯.把所有人的话并在一起,再加上这五个数字不可能相等,答案就出来了.
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
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++)
{
if ((b == 2) + (a == 3) == 1 && (b == 2) + (e == 4) == 1 && (c == 1) + (d == 2) == 1 && (c == 5) + (d == 3) == 1 && (e == 4) + (a == 1) == 1 && a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)
printf("A=%d B=%d C=%d D=%d E=%d\n", a, b, c, d, e);
}
}
}
}
}
return 0;
}
正确的排名就是:
第一名:B
第二名:D
第三名:A
第四名:E
第五名:C
二、写一个程序来确定到底谁是凶手
某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
相信看完第一个问题的你,在看到这个问题的时候,脑子里一定闪过了四个字"小菜一碟".
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
for (a = 0; a <= 1; a++)//等于1 表示是凶手
{
for (b = 0; b <= 1; b++)
{
for (c = 0; c <= 1; c++)
{
for (d = 0; d <= 1; d++)
{
if ((!a) + (c) + (d) + (!d) == 3&&a+b+c+d==1)
printf("A=%d B=%d C=%d D=%d\n", a, b, c, d);
}
}
}
}
return 0;
}
这里需要注意的是if的判断条件,四个人三个人说真话,所以第一个条件相加是3,而ABCD中只有一个凶手,所以ABCD三个数字相加等于1.
显然,凶手是C.
三、杨辉三角形
首先我们先来分析一下杨辉三角形的特征.
杨辉三角,是二项式系数在三角形中的一种几何排列,是中国数学史上的一个伟大成就.
它的精髓就在于,每个数字都等于该数字两肩数字之和,知道了这个特点,我们就可以来实现我们的程序.
为了实现杨辉三角形,我创建了一个100*100的二维数组.这也就注定了我的三角形最多只能输出100行,大家可以自行调整数组大小,改变行数.
有两种办法
首先,将数组初始化全部赋值为0
1.图中三角区的0不变,只需要把数字部分填充,然后打印的时候打印非0部分.
2.第二种就是按照数组顺序填充,然后打印时在每行数字前方添加空格.
在这里我给出第二种方法的代码.第一种方法大家可以尝试,或者如果有更好的办法,成功了记得分享在评论区哦~
#include<stdio.h>
//在屏幕上打印杨辉三角。
int main()
{
int n = 0;
int i = 0;
int j = 0;
scanf("%d", &n);
int arr[100][100] = { 0 };
arr[0][0] = 1;
arr[1][0] = 1;
arr[1][1] = 1;
for (i = 2; i < n; i++)
{
arr[i][0] = 1;
for (j = 0; j <= i; j++)
{
if (j == i)
{
arr[i][j] = 1;
}
else
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n - i; j++)
{
printf(" ");
}
for (j = 0; j <=i; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
仔细观察杨辉三角会发现,它所有行的第一个数字和最后一个数字都为1,所以我们也给对应的arr[i][0]和arr[i][j](i==j).赋值为1.
然后利用杨辉三角的性质,将剩余数组元素赋值.
最后打印输出时为了保证三角形的形状,我们在打印数组前,打印相应数量的空格.
然后我们输入一个n(0<n<100)来检验一下啵.
希望大家多多交流,一起进步!!