#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(); z=x-y; brr.push_back(z); count24(brr,n-1); brr.pop_back(); z=y-x; brr.push_back(z); count24(brr,n-1); brr.pop_back(); z=x*y; brr.push_back(z); count24(brr,n-1); brr.pop_back(); z=x/y; brr.push_back(z); count24(brr,n-1); brr.pop_back(); z=y/x; 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-02-14 19:32:21 浏览: 64
#include <iostream>
这段代码是一个用来判断给定的四个数是否可以通过减乘除等操作得到24的程序。它了递归的方式穷举所有可能的操作在你提供的代码中有一些错误需要修正:
1. 在使用`vector<double> brr=arr`进行复制时,应该使用`vector<double> brr(arr)`来复制arr的内容。
2. 在循环中,每次操作后应该使用`brr.pop_back()`来弹出最后一个数,以保证每次循环都是在原始状态下进行操作。
修正后的代码如下:
```cpp
#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() + j);
brr.erase(brr.begin() + i);
z = x + y;
brr.push_back(z);
count24(brr, n - 1);
brr.pop_back();
z = x - y;
brr.push_back(z);
count24(brr, n - 1);
brr.pop_back();
z = y - x;
brr.push_back(z);
count24(brr, n - 1);
brr.pop_back();
z = x * y;
brr.push_back(z);
count24(brr, n - 1);
brr.pop_back();
if (y != 0)
{
z = x / y;
brr.push_back(z);
count24(brr, n - 1);
brr.pop_back();
}
if (x != 0)
{
z = y / x;
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 (arr[0] != 0 || arr[1] != 0 || arr[2] != 0 || arr[3] != 0)
{
count24(arr, 4);
arr.clear();
for (int i = 0; i < 4; i++)
{
double a;
cin >> a;
arr.push_back(a);
}
}
return 0;
}
```
请注意,这段代码会对给定的四个数进行穷举计算,因此可能需要较长的时间来找到解决方案。如果输入的四个数无法得到24,程序会输出"NO"。如果存在一种操作组合可以得到24,程序会输出"YES"。希望这次的回答对你有帮助!如果还有其他问题,请随时提问。
阅读全文