酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

用c语言解决 小明与小华要给一个水葫芦里加水,为了让这个工作有趣一点,他们准备玩一个游戏。 水葫芦的容积是n 升,每次加水的量必须是整数,可以加1至m 升水。 他们两个轮流加水,谁能恰好把水葫芦加满就取得胜利。 两人都非常聪明,一定会选择最优的策略,请问小华是否能获得游戏的胜利? 第一行是一个整数 t ,表示样例的个数。 以后的t 行,每行一个样例,为三个整数 t,m,n ,其中t=0表示小明先加水,t=1表示小华先加水 表示小明先加水, 表示小华先加水。 依次每行输出一个样例的结果,如果小华能获得胜利,输出nice;否则输出bad

以下是用 C 语言实现的代码: ```c #include <stdio.h> // 判断小华是否能胜利的函数 int isWin(int t, int m, int n) { // 如果水葫芦的容积小于等于可加水的最大量,先加水的人赢 if (n <= m) { if (t == 0) { return 0; // 小明先加,小华输 } else { return 1; // 小华先加,小华赢 } } // 计算可加水的步数 int steps = n / m; int remainder = n % m; // 如果余数为 0 且步数为偶数,先加水的人赢 if (remainder == 0 && steps % 2 == t) { if (t == 0) { return 0; // 小明先加,小华输 } else { return 1; // 小华先加,小华赢 } } // 否则,后加水的人赢 else { if (t == 0) { return 1; // 小明先加,小华赢 } else { return 0; // 小华先加,小华输 } } } int main() { int t, m, n; int numCases; // 样例个数 scanf("%d", &numCases); for (int i = 0; i < numCases; i++) { scanf("%d %d %d", &t, &m, &n); if (isWin(t, m, n)) { printf("nice\n"); } else { printf("bad\n"); } } return 0; } ``` 额外需要注意的逻辑点: 1. 输入数据的合法性检查,比如确保 `t` 的值只能是 0 或 1 ,`m` 和 `n` 是正整数。 2. 对于特殊情况,比如 `m` 大于 `n` 或者 `n` 是 `m` 的整数倍等,需要特别处理。 3. 考虑代码的优化,比如减少重复计算,提高程序的运行效率。 [2024-11-23 09:57:30 | AI写代码神器 | 530点数解答]

相关提问