前言
今天带给大家的是两道有趣的小游戏:买汽水和猜凶手
买汽水
此处介绍两种方法
答案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第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
结语
这两道题不仅有趣,还需要一定的思考,怎么样,是不是感觉用代码解决日常生后中的问题很有趣啊😊,我们下期见!