故事背景:晚上拿起扑克牌,奈何没有牌友,百度了一下有什么单人扑克游戏,然后就发现了24点,随意挑出4张牌,只用加减乘除组合成24点,我抽出了7 7 8 Q(12) ,然后思索了半天没有答案,索性即兴敲了24点答案生成程序,最后发现确实没有答案(= =)
程序效果:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int x,y,z,k;
char st[10];
int a[100],b[100],c[100],use[100];
int count()
{
k=0;
int ans=a[0];
for(int i=0;i<3;i++)
{
if(st[i]=='+'||st[i]=='-'){
b[k++]=ans;
ans=a[i+1];
}
if(st[i]=='*')
{
ans*=a[i+1];
}
if(st[i]=='/')
{
if(ans%a[i+1]==0)
ans/=a[i+1];
else return -1;
}
if(i+1==3)b[k++]=ans;
}
if(k==0)return ans;
else
{
int k=1,ans=b[0];
for(int i=0;i<3;i++)
{
if(st[i]=='+')
{
ans+=b[k++];
}
if(st[i]=='-')
{
ans-=b[k++];
}
}
return ans;
}
}
int dfs(int u)
{
int i;
if(u==3)
{
x=count();
if(x==24)
{
for( i=0;i<3;i++)cout<<a[i]<<st[i];cout<<a[i]<<"="<<24;cout<<"\n";
}
return 0;
}
st[u]='+';
dfs(u+1);
st[u]='-';
dfs(u+1);
st[u]='*';
dfs(u+1);
st[u]='/';
dfs(u+1);
}
int dfs1(int u)
{
if(u==4)
{
dfs(0);return 0;
}
for(int i=0;i<4;i++)
{
if(!use[i])
{
a[u]=c[i];
use[i]=1;
dfs1(u+1);
a[u]=0;
use[i]=0;
}
}
}
int main()
{
for(int i=0;i<4;i++)
cin>>c[i];
dfs1(0);
}