在线编译器 C

#include <stdio.h> int main() { int g, s, b; int count = 0; for (g = 1; g < 5; g++) { for (s = 1; s < 5; s++) { for (b = 1; b < 5; b++) { printf("%d %d %d", g, s, b); if (g != b, b != s, s != g) { count++; } printf("%d\n", count); return 0; }
这段代码试图用三重循环生成三个数字(g, s, b)的所有组合,并统计其中三个数字互不相同的组合数量。但代码中存在几个问题。

- 在条件判断 `if (g != b, b != s, s != g)` 中,逗号运算符只会返回最后一个表达式的值,所以实际上只检查了 `s != g`,而不是三个条件同时成立。应该使用逻辑与运算符 `&&` 来连接多个条件。
- `return 0;` 被放在了最内层循环内部,导致程序在第一次进入内层循环时就结束了,无法完成所有组合的遍历。应该将 `return 0;` 移到所有循环结束之后。