#include <iostream> #include<vector> using namespace std; void count24(vector<double>arr,int n) { if(n==1) { if(arr[0]==24) cout<< "YES"<<endl; else cout<< "NO"<<endl; return; } for(int i=0;i<n-1;i++)//n个数里选择两个 { for(int j=i+1;j<n;j++) { double x=arr[i]; double y=arr[j]; double z; vector<double> brr(arr); brr.erase(brr.begin()+i); brr.erase(brr.begin()+j); z=x+y; brr.push_back(z); count24(brr,n-1); brr.pop_back(); } } } int main() { vector<double> arr; for(int i=0; i<4; i++) { double a; cin>>a; arr.push_back(a); } while(int(arr[0])||int(arr[1])||int(arr[2]) ||int(arr[3])) { count24(arr,4); arr.clear(); for(int i=0; i<4; i++) { double a; cin>>a; arr.push_back(a); } } return 0; }
时间: 2024-04-18 15:23:23 浏览: 69
#include <iostream>
这段代码是一个用来判断给定的四个数是否可以通过加减乘除等操作得到24的程序。它使用了递归的方式来穷举所有可能的操作。具体的实现逻辑如下:
1. 定义了一个名为count24的函数,参数包括一个存储四个数的vector和一个表示剩余可用数的整数n。
2. 如果n为1,表示只剩下一个数了,那么判断这个数是否等于24,如果是则输出"YES",否则输出"NO"。
3. 否则,使用两层循环来选择两个数进行操作。
4. 在每次循环中,定义变量x和y分别表示选中的两个数,定义变量z进行操作结果的存储。
5. 创建一个新的vector brr,将原来的vector arr复制到brr中,并删除选中的两个数。
6. 将x和y的和z添加到brr中,并调用count24函数递归处理新的brr和n-1。
7. 回溯,将brr中的最后一个数弹出。
8. 循环结束后,函数执行完毕。
在主函数main中,首先读取输入的四个数并存储到arr中。然后使用一个while循环来重复处理不同的输入组合,直到输入全为0为止。在每次循环中,调用count24函数来判断四个数是否可以得到24,然后清空arr并读取新的四个数。最后返回0结束程序。
请问你对这段代码有什么问题吗?
阅读全文