C语言实现猜名次,猜凶手,杨辉三角

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:

 

A选手说:B第二,我第三;

B选手说:我第二,E第四;

C选手说:我第一,D第二;

D选手说:C最后,我第三;

E选手说:我第四,A第一;

比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。 

 实现此代码的思路 首先经过5次循环遍历,所有的可能性列出来,根据题目描述,每个人说对了一半,而且每个人说了2句,将这2句话与真的进行比较,真1,假0。具体代码如下:

#include<stdio.h>
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 * c * d * e == 120)//是否同时存在
						{
							printf("A:%d B:%d C:%d D:%d E:%d", a, b, c, d, e);
						}
					}
				}
			}
		}
	}
	return 0;
}

运行结果如下

e28d9a41a98c4b9da29220d9eb1945ef.png

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。

 

以下为4个嫌疑犯的供词:

 

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

 

现在请根据这些信息,写一个程序来确定到底谁是凶手。

 

想要实现代码 首先根据题目分析我们假设真话1,假话0。其次对着4个人进行1次遍历,如果4个人说的话加起来和为3,那么就猜到了凶手。具体代码如下:

#include<stdio.h>
int main()
{
	char k;//杀手killer
	for (k = 'A'; k <= 'D'; k++)
	{
		if (((k != 'A') + (k == 'C') + (k == 'D') + (k != 'D')) == 3)
		{
			printf("凶手是: %c", k);
		}
	
	}
	return 0;
}

运行结果如下:

378b72a8d93847eeba4b0576fbf93616.png 

在屏幕上打印杨辉三角。

 

1

1 1

1 2 1

1 3 3 1

……

 

首先创建二维数组,将杨辉三角的数据存放到二维数组中,打印的是把它前面的空格都删除了,就一边倒的样子。
规律 每一行的第一个元素是1  每一行最后的元素是1  上一行的两个数相加等于下一行 

具体代码如下:

#include<stdio.h>

int main()
{
	int arr[100][100] = {0};
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int j = 0;
	//初始杨辉三角
	for (i = 0; i < n; i++)
	{
		for (j = 0; j <=i; j++)
		{
			if (j == 0 || i == 0)//将每一行第一个和最后一个初始化为1
			{
				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 <= i; j++)
		{
			printf("%-3d", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}

运行结果如下:

05516098739044e5b4d5fa3f929b5400.png

感谢大家观看 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值