三个数可分等差数列
#include <iostream> #include <vector> using namespace std; void printGroups(vector<int>& sequence1, vector<int>& sequence2, vector<int>& sequence3, vector<int>& sequence4) { cout << "Group 1: "; for (int i = 0; i < sequence1.size(); i++) { cout << sequence1[i] << " "; } cout << endl; cout << "Group 2: "; for (int i = 0; i < sequence2.size(); i++) { cout << sequence2[i] << " "; } cout << endl; cout << "Group 3: "; for (int i = 0; i < sequence3.size(); i++) { cout << sequence3[i] << " "; } cout << endl; cout << "Group 4: "; for (int i = 0; i < sequence4.size(); i++) { cout << sequence4[i] << " "; } cout << endl; } void countWays(vector<int>& numbers, vector<int>& removed, vector<int>& sequence1, vector<int>& sequence2, vector<int>& sequence3, vector<int>& sequence4, int index, int& count) { if (sequence1.size() == 4 && sequence2.size() == 4 && sequence3.size() == 4 && sequence4.size() == 4) { count++; printGroups(sequence1, sequence2, sequence3, sequence4); cout << "Removed numbers: "; for (int i = 0; i < removed.size(); i++) { cout << removed[i] << " "; } cout << endl; cout << endl; return; } if (index >= numbers.size()) { return; } // 尝试将当前数添加到第一个等差数列中 if (sequence1.size() < 4) { if (sequence1.size() < 2 || numbers[index] - sequence1[sequence1.size() - 1] == sequence1[1] - sequence1[0]) { sequence1.push_back(numbers[index]); countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, index + 1, count); sequence1.pop_back(); } } // 尝试将当前数添加到第二个等差数列中 if (sequence2.size() < 4) { if (sequence2.size() < 2 || numbers[index] - sequence2[sequence2.size() - 1] == sequence2[1] - sequence2[0]) { sequence2.push_back(numbers[index]); countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, index + 1, count); sequence2.pop_back(); } } // 尝试将当前数添加到第三个等差数列中 if (sequence3.size() < 4) { if (sequence3.size() < 2 || numbers[index] - sequence3[sequence3.size() - 1] == sequence3[1] - sequence3[0]) { sequence3.push_back(numbers[index]); countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, index + 1, count); sequence3.pop_back(); } } // 尝试将当前数添加到第四个等差数列中 if (sequence4.size() < 4) { if (sequence4.size() < 2 || numbers[index] - sequence4[sequence4.size() - 1] == sequence4[1] - sequence4[0]) { sequence4.push_back(numbers[index]); countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, index + 1, count); sequence4.pop_back(); } } // 将当前数添加到已移除的数中 removed.push_back(numbers[index]); // 不将当前数添加到任何一个等差数列中 countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, index + 1, count); // 将当前数从已移除的数中移除 removed.pop_back(); } int main() { vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; vector<int> removed, sequence1, sequence2, sequence3, sequence4; int count = 0; countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, 0, count); cout << "Number of ways: " << count << endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2020-06-20 LaTeX公式编辑器