24点算法
来源:互联网 发布:重装mac os x 编辑:程序博客网 时间:2024/05/21 17:45
感觉这个程序是在七拼八凑..-_-||
#include "stdio.h"//24点算法
#include "stdlib.h"
int main()
...{
int ss(int ,int ,int ,int );
void pre(int*,int,int);
int k=0,a[4];
scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
ss(a[0],a[1],a[2],a[3]);
while(++k<24)...{
pre(a,24,k);
ss(a[0],a[1],a[2],a[3]);
}
system("pause");
return 0;
}
void pre(int a[],int i,int k)//全排列
...{
int t,j,e;
if(k<i)...{
for(e=k,j=1;!(e%(j+1));e/=j,j++);//交换第几位
for(e=1;e*2<j;e++)
...{t=a[e];a[e]=a[j-e];a[j-e]=t;}//位中排序
t=a[j];a[j]=a[0];a[0]=t;}
}
int ss(int a,int b,int c,int d)//符号枚举
...{
void account(int*,int*,int,int);
int e,f,g,res1,res2,res3;
char sign[]=...{'+','*','-','/','#','$'};
for(e=0;e<4;e++)
for(f=0;f<6;f++)
for(g=0;g<6;g++)
...{
res1=a;res2=1;
account(&res1,&res2,e,b);
account(&res1,&res2,f,c);
account(&res1,&res2,g,d);//((a?b)?c)?d
if(res2!=0 && res1%res2==0 && res1/res2==24)...{//((a?b)?c)?d
if(f>=4 && g<4)printf("(%d %c (%d %c %d)) %c %d ",c,sign[f-2],a,sign[e],b,sign[g],d);
else if(f>=4 &&g>=4)printf("%d %c (%d %c (%d %c %d)) ",d,sign[g-2],c,sign[f-2],a,sign[e],b);
else if(f<4 && g>=4)printf("%d %c ((%d %c %d) %c %d) ",d,sign[g-2],a,sign[e],b,sign[f],c);
else printf("((%d %c %d) %c %d) %c %d ",a,sign[e],b,sign[f],c,sign[g],d);
}
if(g==2)...{
res1=a;res2=1;
account(&res1,&res2,e,b);
account(&res1,&res2,f,c-d);
if(res2!=0 && res1%res2==0 && res1/res2==24)...{//(a?b)?(c?d)
if(f>=4)printf("(%d %c %d) %c (%d %c %d) ",c,sign[g],d,sign[f-2],a,sign[e],b);
else printf("(%d %c %d) %c (%d %c %d) ",a,sign[e],b,sign[f],c,sign[g],d);
}
}
}
return 0;
}
void account(int *a,int *b,int sig,int num)
...{
int res1,res2,t;
res1=*a;res2=*b;
if(sig==0)res1+=num*res2;
else if(sig==2)res1-=num*res2;
else if(sig==1)res1*=num;
else if(sig==3)res2*=num;
else if(sig==4)res1=num*res2-res1;
else if(sig==5)...{t=res1;res1=res2;res2=t;res1*=num;}
*a=res1;*b=res2;
}
#include "stdlib.h"
int main()
...{
int ss(int ,int ,int ,int );
void pre(int*,int,int);
int k=0,a[4];
scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
ss(a[0],a[1],a[2],a[3]);
while(++k<24)...{
pre(a,24,k);
ss(a[0],a[1],a[2],a[3]);
}
system("pause");
return 0;
}
void pre(int a[],int i,int k)//全排列
...{
int t,j,e;
if(k<i)...{
for(e=k,j=1;!(e%(j+1));e/=j,j++);//交换第几位
for(e=1;e*2<j;e++)
...{t=a[e];a[e]=a[j-e];a[j-e]=t;}//位中排序
t=a[j];a[j]=a[0];a[0]=t;}
}
int ss(int a,int b,int c,int d)//符号枚举
...{
void account(int*,int*,int,int);
int e,f,g,res1,res2,res3;
char sign[]=...{'+','*','-','/','#','$'};
for(e=0;e<4;e++)
for(f=0;f<6;f++)
for(g=0;g<6;g++)
...{
res1=a;res2=1;
account(&res1,&res2,e,b);
account(&res1,&res2,f,c);
account(&res1,&res2,g,d);//((a?b)?c)?d
if(res2!=0 && res1%res2==0 && res1/res2==24)...{//((a?b)?c)?d
if(f>=4 && g<4)printf("(%d %c (%d %c %d)) %c %d ",c,sign[f-2],a,sign[e],b,sign[g],d);
else if(f>=4 &&g>=4)printf("%d %c (%d %c (%d %c %d)) ",d,sign[g-2],c,sign[f-2],a,sign[e],b);
else if(f<4 && g>=4)printf("%d %c ((%d %c %d) %c %d) ",d,sign[g-2],a,sign[e],b,sign[f],c);
else printf("((%d %c %d) %c %d) %c %d ",a,sign[e],b,sign[f],c,sign[g],d);
}
if(g==2)...{
res1=a;res2=1;
account(&res1,&res2,e,b);
account(&res1,&res2,f,c-d);
if(res2!=0 && res1%res2==0 && res1/res2==24)...{//(a?b)?(c?d)
if(f>=4)printf("(%d %c %d) %c (%d %c %d) ",c,sign[g],d,sign[f-2],a,sign[e],b);
else printf("(%d %c %d) %c (%d %c %d) ",a,sign[e],b,sign[f],c,sign[g],d);
}
}
}
return 0;
}
void account(int *a,int *b,int sig,int num)
...{
int res1,res2,t;
res1=*a;res2=*b;
if(sig==0)res1+=num*res2;
else if(sig==2)res1-=num*res2;
else if(sig==1)res1*=num;
else if(sig==3)res2*=num;
else if(sig==4)res1=num*res2-res1;
else if(sig==5)...{t=res1;res1=res2;res2=t;res1*=num;}
*a=res1;*b=res2;
}
- [修改]24点算法
- 24点算法
- 24点算法
- 24点算法
- 24点算法
- 24点算法
- 24点经典算法
- 24点算法实现
- 24点算法2
- 24点算法。c++。
- 24点算法
- 24点游戏算法
- 24点算法
- 24点算法
- 24点游戏算法
- 24点算法
- 24点算法
- 24点问题算法
- 几块可利用的挡箭牌
- VC调试入门
- ubuntu 常见依赖关系问题及解决
- 嵌入式开发经典网站集锦
- 学好VC++的十大良好习惯
- 24点算法
- asp.net总结(3)
- 开发人员不容错过的13篇的技术经典文章
- Deal with READIBMW Error #EJRBK066
- C#实现单件
- 字符/单词提取与过滤
- 对自定义结构慎用sizeof;最近的读书体会;
- 如何在Java中实现将两个数相互交换的方法
- Lucene架构简单分析