5位运动员参加了10米台跳水比赛。日本某地发生了一件谋杀案..

1.

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

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>
void Match()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int d = 0;
	int e = 0;
    //每个人都有可能在第一名到第五名中任意位置
	for ( a = 1; a < 6; a ++)
	{
		for ( b = 1; b < 6; b ++)
		{
			for (c = 1; c < 6; c ++)
			{
				for ( d = 1; d < 6; d ++)
				{
					for ( e = 1; e < 6; e ++)
					{
						//A选手说:B第二,我第三;
						//B选手说:我第二,E第四;
						//C选手说:我第一,D第二;
						//D选手说:C最后,我第三;
						//E选手说:我第四,A第一;
						//每人说对了一半 就是一句真话 一句假话 即一个为1 一个为0 
						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)
						{
                             //并且每个人的名次不能相等
							if(a != b&&a != c&&a != d&& a != e
								&&b != c&&b != d&&b != e&& c != d
								&& c != e&&d != e )
							{
								
									printf("%d %d %d %d %d \n", a, b, c, d, e);
								
							}
						}
					
						
					}
				}
			}
		}
	}
}
int main()
{
	Match();
	Murderer();
	Yanghui(5);
}

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


#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>

void Murderer()
{
	
	int i;
	char people[4] = { 'a', 'b', 'c', 'd' };
	char kill;
	for (i = 0; i < sizeof(people) / sizeof(people[0]); i++)
	{
		kill = people[i];
		//A说:不是我。
		//B说:是C。
		//C说:是D。
		//D说:C在胡说
		//已知3个人说了真话,1个人说的是假话。
			if ((people[0] != kill) 
			+ (people[2] == kill) 
			+ (people[3] == kill)
			+ (people[3] != kill) == 3)
		{
			printf("凶手是%c", kill);
		}
	}

}
int main()
{
    Murderer();
	system("pause");
	return 0;
}

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


#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>
void Yanghui(int num)
{
	int  a[100][500] = { 0 };
	a[0][0] = 1;//前两层直接赋值
	a[1][0] = 1;
	a[1][1] = 1;
	//1
	//1 1
	//1 2 1
	//1 3 3 1
	for (int i = 2; i < num; i++)
	{
		for (int j = 1; j < i + 1; j++)
		{
			a[i][0] = 1;//每一行第一个和最后一个都是1
			a[i][i] = 1;
			a[i][j] = a[i - 1][j] +a [i - 1][j - 1];
		}
	}
	for (int i = 0; i < num; i++)
	{
          //每一行最前面的空格数等于层数减去行数减一   即num-i-1
		for (int k = 0; k < num - i - 1; k++)
		{
			printf("%c", ' ');
		}
		for (int j = 0; j < i + 1; j++)
		{
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
}
int main()
{
	int num = 0;
	printf("请输入一个大于2的数->");
	while (1)
	{
		scanf("%d", &num);
		if (num < 3)
		{
			printf("输入有误!\n请重新输入->");
		}
		else
			break;
	}
	Yanghui(num);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/be_gin_ner/article/details/85594554