題目
ProblemC
題目:簡單的24點
輸入爲4個數字,a,b,c,d。若a#b#c#d,則稱該數組滿足24點,其中#可以爲+、-、*、/任一個,若不能得到結果24,則稱該數組不滿足24點。(計算爲實型)
輸入:
第一行爲測試組數t
接下來t行,每一行爲四個整數a,b,c,d,測試是否滿足24點
1<=a,b,c,d<10000(右區間忘了,反正四個數不爲0)
輸出
在每一行
若滿足,輸出YES
不滿足,輸出NO
思路
我想的有點複雜,因爲沒有測試用例,我把符號順便也打出來了,檢驗一下
代碼
#include <bits/stdc++.h>
using namespace std;
char cpt[4]={'+','-','*','/'}; //這題就是計算器的變體啊! 08-18年
vector<int>myvector; //存儲數字,好在都是整數,沒考慮0的情況
vector<char>cmp;//存儲運算符
int arr[20];//存儲單步運算數結果
int Computer(string str)
{
myvector.clear();
cmp.clear();
memset(arr,0,sizeof(arr));
string temp="";
for(int i=0;i<str.size();i++)
{
if(str[i]>='0'&&str[i]<='9') temp+=str[i];
else {
cmp.push_back(str[i]);
myvector.push_back(atoi(temp.c_str()));
temp="";
}
}
myvector.push_back(atoi(temp.c_str()));
// for(int i=0;i<cmp.size();i++)
// {
// cout<<cmp[i]<<" ";
// }
// cout<<endl;
arr[0]=myvector[0];
int k=0;
for(int i=0;i<3;i++)
{
if(cmp[i]=='+') arr[++k]=myvector[i+1];
if(cmp[i]=='-') arr[++k]=-(myvector[i+1]);
if(cmp[i]=='*') arr[k]=arr[k]*(myvector[i+1]);
if(cmp[i]=='/') arr[k]=arr[k]/(myvector[i+1]);
}
int answer=0;
for(int i=0;i<=k;i++)
{
answer+=arr[i];
// cout<<"answer=="<<answer<<endl;
}
return answer;
}
int main()
{
int T; cin>>T;
while(T--)
{
string a,b,c,d; cin>>a>>b>>c>>d;
string str="";
int answer=0;
int flag=0;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
for(int k=0;k<4;k++)
{
str=a+cpt[i]+b+cpt[j]+c+cpt[k]+d;
answer=Computer(str);
if(answer==24)
{
for(int i=0;i<cmp.size();i++)
{
cout<<cmp[i]<<" ";
}
cout<<endl;
flag=1;
break;
}
str="";
}
if(flag) break;
}
if(flag) break;
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}