rt,我WA#7,把数据下载下来本地跑出来跟答案一模一样,不知道为什么不给我过,整无语了 以下是代码,有没有大佬为我指点一二
#7输入:4 4 4 6
输出:
4+4=8
8-4=4
6*4=24
#include<bits/stdc++.h>
using namespace std;
vector<char> op;
int v[10][10],a,b,c,d;
bool vis[10][10];
bool bingo=0,sp=0;
void dfs(int n){
if(bingo) return;
if(n==4){
/*if(v[1][1]==9&&v[2][1]==7&&v[3][1]==7&&v[4][1]==5&&v[2][3]!=v[3][2]){
for(int i=1;i<=4;++i){
for(int j=1;j<=4;++j){
cout<<v[j][i]<<" ";
}
cout<<endl;
}
}*/
if(v[1][4]==24) bingo=1;
return;
}
op.push_back('+');
v[1][n+1]=v[1][n]+v[2][n];
v[2][n+1]=v[3][n];v[3][n+1]=v[4][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
if(n==2){
sp=1;
op.push_back('+');
v[2][n+1]=v[2][n]+v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
if(v[2][n]>v[3][n]){
op.push_back('-');
v[2][n+1]=v[2][n]-v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
}
op.push_back('*');
v[2][n+1]=v[2][n]*v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
if(v[2][n]==0||double(v[1][n])/double(v[2][n])!=v[1][n]/v[2][n]) return;
op.push_back('/');
v[2][n+1]=v[2][n]/v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
sp=0;
}
if(v[1][n]>v[2][n]){
op.push_back('-');
v[1][n+1]=v[1][n]-v[2][n];
v[2][n+1]=v[3][n];v[3][n+1]=v[4][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
}
if(n==2){
sp=1;
op.push_back('+');
v[2][n+1]=v[2][n]+v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
if(v[2][n]>v[3][n]){
op.push_back('-');
v[2][n+1]=v[2][n]-v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
}
op.push_back('*');
v[2][n+1]=v[2][n]*v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
if(v[2][n]==0||double(v[1][n])/double(v[2][n])!=v[1][n]/v[2][n]) return;
op.push_back('/');
v[2][n+1]=v[2][n]/v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
sp=0;
}
op.push_back('*');
v[1][n+1]=v[1][n]*v[2][n];
v[2][n+1]=v[3][n];v[3][n+1]=v[4][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
if(v[2][n]==0||double(v[1][n])/double(v[2][n])!=v[1][n]/v[2][n]) return;
op.push_back('/');
v[1][n+1]=v[1][n]/v[2][n];
v[2][n+1]=v[3][n];v[3][n+1]=v[4][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
if(n==2){
sp=1;
op.push_back('+');
v[2][n+1]=v[2][n]+v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
if(v[2][n]>v[3][n]){
op.push_back('-');
v[2][n+1]=v[2][n]-v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
}
op.push_back('*');
v[2][n+1]=v[2][n]*v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
if(v[2][n]==0||double(v[1][n])/double(v[2][n])!=v[1][n]/v[2][n]) return;
op.push_back('/');
v[2][n+1]=v[2][n]/v[3][n];
v[1][n+1]=v[1][n];
dfs(n+1);
if(bingo) return;
op.pop_back();
sp=0;
}
}
int main(){
cin>>a>>b>>c>>d;
int T=514541;
while(T--){
srand(rand());
int i=rand()%4+1,j=rand()%4+1;
if(i==j) continue;
//if(vis[i][j]) continue;
vis[i][j]=1;
for(int i=2;i<=4;++i)
for(int j=1;j<=4;++j)
v[j][i]=0;
v[1][1]=a,v[2][1]=b,v[3][1]=c,v[4][1]=d;
swap(v[i][1],v[j][1]);
dfs(1);
if(bingo) break;
i=rand()%4+1,j=rand()%4+1;
if(i==j) continue;
//if(vis[i][j]) continue;
vis[i][j]=1;
for(int i=2;i<=4;++i)
for(int j=1;j<=4;++j)
v[j][i]=0;
op.clear();
swap(v[i][1],v[j][1]);
dfs(1);
if(bingo) break;
}
if(!bingo){
cout<<"No answer!";return 0;
}
if(!sp){
///cout<<"sp";
if((op[0]=='+'||op[0]=='*')&&v[1][1]<v[2][1]) swap(v[1][1],v[2][1]);
cout<<v[1][1]<<op[0]<<v[2][1]<<'='<<v[1][2]<<endl;
if((op[1]=='+'||op[1]=='*')&&v[1][2]<v[2][2]) swap(v[1][2],v[2][2]);
cout<<v[1][2]<<op[1]<<v[2][2]<<'='<<v[1][3]<<endl;
if((op[2]=='+'||op[2]=='*')&&v[1][3]<v[2][3]) swap(v[1][3],v[2][3]);
cout<<v[1][3]<<op[2]<<v[2][3]<<'='<<v[1][4]<<endl;
}
else{
if((op[0]=='+'||op[0]=='*')&&v[1][1]<v[2][1]) swap(v[1][1],v[2][1]);
cout<<v[1][1]<<op[0]<<v[2][1]<<'='<<v[1][2]<<endl;
if((op[1]=='+'||op[1]=='*')&&v[2][2]<v[3][2]) swap(v[2][2],v[3][2]);
cout<<v[2][2]<<op[1]<<v[3][2]<<'='<<v[2][3]<<endl;
if((op[2]=='+'||op[2]=='*')&&v[1][3]<v[2][3]) swap(v[1][3],v[2][3]);
cout<<v[1][3]<<op[2]<<v[2][3]<<'='<<v[1][4]<<endl;
}
return 0;
}