C语言------一种思路解决实际问题

1.比赛名次问题

C语言------一种思路解决实际问题_第1张图片

ABCDE参加比赛,那么每个人的名次都有5种可能,即1,2,3,4,5;

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
							&& (d == 3) && (c == 5) == 1
							&& (e == 4) && (a == 1) == 1)
						{
							if (a * b * c * d * e == 120)
							{
								printf("a=%d b=%d c=%d d=%d e=%d", a, b, c, d, e);
							}
						}
					}
				}
			}
		}
	}
}

这道题目的主要思想就是使用判断语句,真就是1,假就是0,每位选手只有一个人说的是对的,就是2个判断条件的和是1,使用逻辑与运算符,使得每个人的话都是一半对;

如果这样结束,我们会发现会出现名次相同的情况,所以要使得他们分别对应12345个名次,就要满足名次的乘积是120;

其实我们不难发现,如果这道题目真的使用传统方法解决,很难办,但是当我们使用假就是0,真就是1的时候,就可以很快的得到位序。

2.找凶手问题

C语言------一种思路解决实际问题_第2张图片

这道题目与上一道题的思想类似,但是凶手只有一个人,我们可以依次假设ABCD是凶手,然后根据供词进行判断,如果符合3个真话,1个假话,就可以知道谁是凶手;

如果我们依然使用假就是0,真就是1,那么他们的和是3时,就找到凶手;

int main()
{
	char killer = 0;
	for (killer = 'a'; killer <= 'd'; killer++)
	{
		if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3)
		{
			printf("%c", killer);
			break;
		}
	}
	return 0;
}

如上图所示,利用循环找到凶手之后,使用break终止循环。

你可能感兴趣的:(C语言习题集,c语言,java,算法)