📄 有优先级别的24点.cpp
字号:
#include<iostream.h>
const double min=0.0000001;
const int size=4;
struct node{
char name;
double value;
}data[size];
double find(char ch,int change)
{
double re=0;
int pos=-1;
for(int i=0;i<size;i++)
if(data[i].name==ch)
{
re=data[i].value;
pos=i;
break;
}
if(change==1&&pos!=-1)
data[pos].value=-data[pos].value;
return re;
}
double cal(char str[],int begin,int end,int change)
{
double result=find(str[begin],0);
if(change==1)
{
for(int i=begin+1;i<end;i+=2)
if(str[i]=='-')
find(str[i+1],1);
}
else
{
if(begin>end)
return 0;
int pos=-1;
for(int i=begin;i<=end;i++)
if(str[i]=='+'||str[i]=='-')
{
pos=i;
break;
}
if(pos!=-1)
return cal(str,begin,pos-1,0)+cal(str,pos+1,end,0);
for(i=begin+1;i<end;i+=2)
if(str[i]=='*')
result*=find(str[i+1],0);
else
result/=find(str[i+1],0);
}
return result;
}
void main()
{
char str[2*size],sign[4]={'+','-','*','/'};
int sum=0;
str[0]='a';str[2]='b';str[4]='c';str[6]='d';str[7]='\0';
for(int i=0;i<size;i++)
data[i].name='a'+i;
for(int a=1;a<=10;a++)
for(int b=1;b<=10;b++)
for(int c=1;c<=10;c++)
for(int d=1;d<=10;d++)
{
data[0].value=a;data[1].value=b;data[2].value=c;data[3].value=d;
for(int j=0;j<size;j++)
for(int k=0;k<size;k++)
for(int p=0;p<size;p++)
{
str[1]=sign[j];str[3]=sign[k];str[5]=sign[p];
cal(str,0,6,1);
double re=cal(str,0,6,0);
cal(str,0,6,1);
if(re-24<=min&&re-24>=-min)
{
cout<<data[0].value<<str[1]<<data[1].value;
cout<<str[3]<<data[2].value<<str[5];
cout<<data[3].value<<"="<<re<<endl;
sum++;
}
}
}
cout<<"一共是:"<<sum<<"个!"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -