给定4个小于12的数
可能“no answer"
5秒后
输入1继续
2结束
用“n+m=k”的格式答题(请不要乱输入)
当显示“24 win!"说明正确
5秒后
输入1继续
2结束
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int a[4]={},vis[4]={},n[4]={},a1[4]={},a2[4]={},f=0;
int q,w,m,q1,w1,m1,q2,w2,m2,t=0;
char x,y,x1,x2;
void v()
{
for(int i=0;i<4;i++)
if(a[i]==24) {f=1;
break;}
}
void dfs(int t)
{
if(t==1) {v();return;}
if(t>1)
for(int i=0;i<4;i++)
if(a[i]==24) return;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(vis[j]==0&&a[i]>=a[j]&&i!=j)
{
a1[4-t]=a[i];
a2[4-t]=a[j];
a[i]=a[i]+a[j];
vis[j]=1;
n[4-t]=1;
if(a[i]>0&&vis[i]==0)
dfs(t-1);
vis[j]=0;
a[i]-=a[j];
a1[4-t]=a[i];
a2[4-t]=a[j];
a[i]=a[i]-a[j];
vis[j]=1;
n[4-t]=2;
if(a[i]>0&&vis[i]==0)
dfs(t-1);
vis[j]=0;
a[i]+=a[j];
a1[4-t]=a[i];
a2[4-t]=a[j];
a[i]=a[i]*a[j];
vis[j]=1;
n[4-t]=3;
if(a[i]>0&&vis[i]==0)
dfs(t-1);
vis[j]=0;
a[i]/=a[j];
if(a[i]%a[j]==0)
{
a1[4-t]=a[i];
a2[4-t]=a[j];
a[i]=a[i]/a[j];
vis[j]=1;
n[4-t]=4;
if(a[i]>0&&vis[i]==0)
dfs(t-1);
vis[j]=0;
a[i]*=a[j];
}
}
}
//判断输入合法性
void check() {
cin >> q >> x >> w >> y >> m;
if ( (x == '+') && (q + w == m) &&
( (q == a[0]) || (q == a[1]) || (q == a[2]) || (q == a[3]) ) &&
( (w == a[0]) || (w == a[1]) || (w == a[2]) || (w == a[3]) ) &&
(y == '=') ) {
}
else if ( (x == '-') && (q - w == m) &&
( (q == a[0]) || (q == a[1]) || (q == a[2]) || (q == a[3]) ) &&
( (w == a[0]) || (w == a[1]) || (w == a[2]) || (w == a[3]) ) &&
(y == '=') ) {
}
else if ( (x == '*') && (q * w == m) &&
( (q == a[0]) || (q == a[1]) || (q == a[2]) || (q == a[3]) ) &&
( (w == a[0]) || (w == a[1]) || (w == a[2]) || (w == a[3]) ) &&
(y == '=') ) {
}
else if ( (x == '/') && (q / w == m) && (q % m == 0) &&
( (q == a[0]) || (q == a[1]) || (q == a[2]) || (q == a[3]) ) &&
( (w == a[0]) || (w == a[1]) || (w == a[2]) || (w == a[3]) ) &&
(y == '=') ) {
}
else {
cout << "输入不合法,请重新输入" << endl;
check();
}
}
void checka() {
cin >> q1 >> x1 >> w1 >> y >> m1;
if ( (x1 == '+') && (q1 + w1 == m1) &&
( (q1 == a[0]) || (q1 == a[1]) || (q1 == a[2]) || (q1 == a[3]) || (q1 == m) ) &&
( (w1 == a[0]) || (w1 == a[1]) || (w1 == a[2]) || (w1 == a[3]) || (w1 == m) ) &&
(y == '=') ) {
}
else if ( (x1 == '-') && (q1 - w1 == m1) &&
( (q1 == a[0]) || (q1 == a[1]) || (q1 == a[2]) || (q1 == a[3]) || (q1 == m) ) &&
( (w1 == a[0]) || (w1 == a[1]) || (w1 == a[2]) || (w1 == a[3]) || (w1 == m) ) &&
(y == '=') ) {
}
else if ( (x1 == '*') && (q1 * w1 == m1) &&
( (q1 == a[0]) || (q1 == a[1]) || (q1 == a[2]) || (q1 == a[3]) || (q1 == m) ) &&
( (w1 == a[0]) || (w1 == a[1]) || (w1 == a[2]) || (w1 == a[3]) || (w1 == m) ) &&
(y == '=') ) {
}
else if ( (x1 == '/') && (q1 / w1 == m1) && (q1 % m1 == 0) &&
( (q1 == a[0]) || (q1 == a[1]) || (q1 == a[2]) || (q1 == a[3]) || (q1 == m) ) &&
( (w1 == a[0]) || (w1 == a[1]) || (w1 == a[2]) || (w1 == a[3]) || (w1 == m) ) &&
(y == '=') ) {
}
else {
cout << "输入不合法,请重新输入" << endl;
checka();
}
}
void checkb() {
cin >> q2 >> x2 >> w2 >> y >> m2;
if ( (x2 == '+') && (q2 + w2 == m2&&m2==24) &&
( (q2 == a[0]) || (q2 == a[1]) || (q2 == a[2]) || (q2 == a[3]) || (q2 == m) || (q2==m1) ) &&
( (w2 == a[0]) || (w2 == a[1]) || (w2 == a[2]) || (w2 == a[3]) || (w2 == m) || (w2==m1) ) &&
(y == '=') ) {
t++;
cout<<"24 win"<<'!'<<"\n"<<"2秒后刷新";
}
else if ( (x2 == '-') && (q2 - w2 == m2&&m2==24) &&
( (q2 == a[0]) || (q2 == a[1]) || (q2 == a[2]) || (q2 == a[3]) || (q2 == m) || (q2==m1) ) &&
( (w2 == a[0]) || (w2 == a[1]) || (w2 == a[2]) || (w2 == a[3]) || (w2 == m) || (w2==m1) ) &&
(y == '=') ) {
t++;
cout<<"24 win"<<'!'<<"\n"<<"2秒后刷新";
}
else if ( (x2 == '*') && (q2 * w2 == m2&&m2==24) &&
( (q2 == a[0]) || (q2 == a[1]) || (q2 == a[2]) || (q2 == a[3]) || (q2 == m) || (q2==m1) ) &&
( (w2 == a[0]) || (w2 == a[1]) || (w2 == a[2]) || (w2 == a[3]) || (w2 == m) || (w2==m1) ) &&
(y == '=') ) {
t++;
cout<<"24 win"<<'!'<<"\n"<<"2秒后刷新";
}
else if ( (x2 == '/') && (q2 / w2 == m2&&m2==24) && (q2 % m2 == 0) &&
( (q2 == a[0]) || (q2 == a[1]) || (q2 == a[2]) || (q2 == a[3]) || (q2 == m) || (q2==m1) ) &&
( (w2 == a[0]) || (w2 == a[1]) || (w2 == a[2]) || (w2 == a[3]) || (w2 == m) || (w2==m1) ) &&
(y == '=') ) {
t++;
cout<<"24 win"<<'!'<<"\n"<<"2秒后刷新";
}
else {
cout << "输入不合法,请重新输入" << endl;
checkb();
}
}
int main()
{
char c='1';
while(c=='1'){
//首先随机生成四个 1 到 12 之间的数字作为游戏可用的数字。
srand(time(0));
a[0] = rand() % 12 + 1;
a[1] = rand() % 12 + 1;
a[2] = rand() % 12 + 1;
a[3] = rand() % 12 + 1;
cout << "\n可用的四个数字:";
cout << a[0] << " " << a[1] <<" "<<a[2]<<" "<<a[3]<<"\n";
cout << "\n积分" <<':'<<t<<"\n";
//dfs判断是否可以算24。
dfs(4);
if(a[0]==1&&a[1]==1&&a[2]==1&&a[3]==24||a[0]==1&&a[1]==1&&a[2]==24&&a[3]==1||a[0]==1&&a[1]==24&&a[2]==1&&a[3]==1||a[0]==24&&a[1]==1&&a[2]==1&&a[3]==1){
f=1;
}
if(f==0){
cout<<"sorry no answer\n2秒后刷新";
}
else{ check();
if(q==a[0])a[0]=-12;
else if(q==a[1])a[1]=-12;
else if(q==a[2])a[2]=-12;
else if(q==a[3])a[3]=-12;
else if(w==a[0])a[0]=-12;
else if(w==a[1])a[1]=-12;
else if(w==a[2])a[2]=-12;
else if(w==a[3])a[3]=-12;
checka();
if(q1==a[0])a[0]=-12;
else if(q1==a[1])a[1]=-12;
else if(q1==a[2])a[2]=-12;
else if(q1==a[3])a[3]=-12;
else if(q1==m)m=-12;
else if(w1==a[0])a[0]=-12;
else if(w1==a[1])a[1]=-12;
else if(w1==a[2])a[2]=-12;
else if(w1==a[3])a[3]=-12;
else if(w1==m)m=-12;
checkb();
}
Sleep(2000);
system("cls");
cout << "积分" <<':'<<t;
if(t==2)cout<<"恭喜获得“算24小白”称号" ;
if(t==5)cout<<"恭喜获得“算24萌新”称号";
if(t==10)cout<<"恭喜获得“算24入门”称号";
if(t==30)cout<<"恭喜获得“算24青铜”称号";
if(t==40)cout<<"恭喜获得“算24白银”称号";
if(t==70)cout<<"恭喜获得“算24黄金”称号";
if(t==90)cout<<"恭喜获得“算24王者”称号";
cout<<"\n继续请按1 \n结束请按2";
cin>>c;
system("cls");
}
return 0;
}
请各位大佬帮忙评测一下
(发现bug给解决方案)!