社区讨论
70分
P1236算24点参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m2lvosmc
- 此快照首次捕获于
- 2024/10/23 20:56 去年
- 此快照最后确认于
- 2024/10/23 21:53 去年
C
#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
int a[4];
bool flag;
char ans[3];
void dfs(int u,int last){
if(u==4){
if(last==24){
flag=true;
}return ;
}if(flag||last==0||last==24)return ;
ans[u-1]='+';
dfs(u+1,last+a[u]);
if(flag)return ;
ans[u-1]='-';
dfs(u+1,last-a[u]);
if(flag)return ;
ans[u-1]='*';
dfs(u+1,last*a[u]);
if(flag)return ;
ans[u-1]='/';
dfs(u+1,last/a[u]);
if(flag)return ;
}
void print(){
int last=a[0];
if(ans[0]=='+')last+=a[1];
if(ans[0]=='-')last-=a[1];
if(ans[0]=='*')last*=a[1];
if(ans[0]=='/')last/=a[1];
if(ans[0]=='+'||ans[0]=='*')cout<<max(a[0],a[1])<<ans[0]<<min(a[0],a[1])<<'='<<last<<"\n";
else cout<<a[0]<<ans[0]<<a[1]<<'='<<last<<"\n";
a[1]=last;
if(ans[1]=='+')last+=a[2];
if(ans[1]=='*')last*=a[2];
if(ans[1]=='/')last/=a[2];
if(ans[1]=='-')last-=a[2];
if(ans[1]=='+'||ans[1]=='*')cout<<max(a[1],a[2])<<ans[1]<<min(a[1],a[2])<<'='<<last<<"\n";
else cout<<a[1]<<ans[2]<<a[2]<<'='<<last<<"\n";
a[2]=last;
if(ans[2]=='+')last+=a[3];
if(ans[2]=='-')last-=a[3];
if(ans[2]=='*')last*=a[3];
if(ans[2]=='/')last/=a[3];
if(ans[2]=='+'||ans[2]=='*')cout<<max(a[2],a[3])<<ans[2]<<min(a[2],a[3])<<'='<<last<<"\n";
else cout<<a[2]<<ans[2]<<a[3]<<'='<<last<<"\n";
}
signed main(){
for(int i=0;i<4;i++){
cin>>a[i];
}sort(a,a+4);
do{
dfs(1,a[0]);
if(flag){
print();
return 0;
}
}while(next_permutation(a,a+4));
cout<<"No answer!";
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...