用C语言解决实际问题之买汽水、猜凶手(名次)

前言

今天带给大家的是两道有趣的小游戏:买汽水和猜凶手

买汽水

此处介绍两种方法

答案1

直接利用循环,直到剩余的空瓶子个数小于2

int main()
{
	int money = 0;
	scanf("%d", &money);
	int total = money;
	int empty = money;

	while (empty >= 2)
	{
		total += empty / 2;
		empty = empty / 2 + empty % 2;
	}

	printf("%d\n", total);

	return 0;
}

答案2(优化版)

其实我们可以总结出一定的数学规律:
钱数和总瓶数存在
total = 2 * money - 1
这样的关系

int main()
{
	int money = 0;
	scanf("%d", &money);
	int total = 0;

	if (money > 0)
		total = 2 * money - 1;

	printf("%d\n", total);

	return 0;
}

或者,我们从价值交换的角度去理解这道题,
20块钱,能换到40个空瓶,但最后到手的其实是39瓶,因为最后一瓶是换不到的,这种思路大家可以琢磨一下。

猜凶手

示例

这道题可以取巧的地方是:
字符a、b、c、d直接对应四个人,并且因为他们的ASCII码值是连续的,所以可以直接使用循环遍历a、b、c、d

int main()
{
	char killer = 0;

	for (killer = 'a'; killer <= 'd'; killer++)
	{
		if ((killer !='a') + (killer =='c') + (killer=='d') + (killer!='d') == 3)
		{
			printf("killer = %c\n", killer);
		}
	}

	return 0;
}

提示:
其实这种逻辑推理题,只要把最终结果所需满足的真假情况找出来即可,至于推理过程交给电脑即可。

同类题

给大家介绍一道同类题,大家可以练练手~

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

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

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

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

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

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

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

结语

这两道题不仅有趣,还需要一定的思考,怎么样,是不是感觉用代码解决日常生后中的问题很有趣啊,我们下期见!

你可能感兴趣的:(C语言小游戏,c语言,开发语言)