6.2分鱼问题两种解法
// 分鱼问题,从E开始递推,使用for循环简化中间计算,优化枚举 #include <iostream> using namespace std; int main() { int num[5]; for (num[4] = 16; ;num[4] += 20) { int i = 3; for (; i >= 1; --i) { num[i] = num[i+1] / 4 * 5 + 1; if (num[i] % 4 != 0) break; } if (i == 0) // 已找到答案 break; } num[0] = num[1] / 4 * 5 + 1; for (int i = 0; i < 5; ++i) cout << num[i] << ' ';
return 0; }
// 分鱼问题,从E开始递推 #include <iostream> using namespace std; int main() { // 定义数组 int num[5]; // 从6开始枚举num[4] for (num[4] = 6; ; num[4] += 5) { if (num[4] % 4 != 0) continue; num[3] = num[4] / 4 * 5 + 1; if (num[3] % 4 != 0) continue; num[2] = num[3] / 4 * 5 + 1; if (num[2] % 4 != 0) continue; num[1] = num[2] / 4 * 5 + 1; if (num[1] % 4 != 0) continue; num[0] = num[1] / 4 * 5 + 1; break; } // 输出答案 for (int i = 0; i < 5; ++i) cout << num[i] << ' '; return 0; }
// 分鱼问题,从A开始递推,使用for循环简化中间计算,优化枚举 #include <iostream> using namespace std; int main() { int num[5]; for (num[0] = 16; ; num[0] += 5) { int i = 0; for (; i < 4; ++i) { num[i+1] = num[i] / 5 * 4; // 整数除法,可以不减1就直接除以5 if (num[i+1] % 5 != 1) break; } if (i >= 4) // 已找到答案 break; } for (int i = 0; i < 5; ++i) cout << num[i] << ' '; return 0; }