荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Version (Who makes history and why), 信区: Program
标 题: 求解24点的C程序(转载)
发信站: 荔园晨风BBS站 (Tue Mar 25 18:36:09 2003), 站内信件
// Fantastic FIRE of Tiny Bug Studio 郁明
//联络:F_FIRE@990.net bp:52330*750999
#include <stdio.h>
#include <stdlib.h> //system(),exit()
#include <conio.h> // clrscr()
#define DA 24
float op(float,float,float); //运算
int pai[4]; //四张牌pai[1]--pai[4]
void suanfa(int pai[]); //主算法(穷举)
char *fh(int t); //显示符号
void main(void)
{
clrscr(); //清屏
printf ("\t\t傻瓜法算%d点 (穷举计算) \n>=|> Fantastic FIRE 异火制作 F_
FIRE@990.net <|=<\n",DA);
do {printf ("\n请输入第一张牌:");if(scanf("%d",&pai[1])==0) exit(1);}while(p
ai[1]==0); //不允许输入0
do {printf ("\n请输入第二张牌:");if(scanf("%d",&pai[2])==0) exit(1);}while(p
ai[2]==0);
do {printf ("\n请输入第三张牌:");if(scanf("%d",&pai[3])==0) exit(1);}while(p
ai[3]==0);
do {printf ("\n请输入第四张牌:");if(scanf("%d",&pai[4])==0) exit(1);}while(p
ai[4]==0);
suanfa(pai);
clrscr();
system ("type 24.log|more"); //分页显示24.log结果文件
}
char *fh(int t)
{
switch (t){
case 4:return " 加 " ;break;
case 2:return " 减 " ;break;
case 3:return " 乘 " ;break;
case 1:return "除以" ;break;
default:{ printf("Bug!\n"); exit(1);} //内部测试使用
}}
int op(int x,int y,int n)
{
switch (n) {
case 4: return x+y;break;
case 2: return x-y;break;
case 3: return x*y;break;
case 1: if(y==0){return 0.1;break;}else return x/y;break; //过滤掉 y=0 时候
的计算
default:{ printf("Bug!\n"); exit(1);}
}}
void suanfa(int pai[])
{
FILE *out; // 24.log
out=fopen("24.log","w+");
fprintf (out,"\n您输入的四张牌是:%d %d %d %d\n答案如下:\n\n",pai[1],pai[2],p
ai[3],pai[4]);
register int jsq=0; //计数器
register int i,j,k, l,m,n,o; //3个符号,4张牌
for (i=4;i>=1;i--)
for (j=4;j>=1;j--)
for (k=4;k>=1;k--)
for (l=4;l>=1;l--) // 穷举
for (m=4;m>=1;m--)
for (n=4;n>=1;n--)
for (o=4;o>=1;o--)
{ if((l!=m)&&(l!=n)&&(l!=o)&&(m!=n)&&(m!=o)&&(n!=o)&&
op(
op(
op(pai[l],pai[m],i)
,pai[n],j)
,pai[o],k)==24)
{
printf (">");
fprintf (out,"[(%d%s",pai[l],fh(i));
fprintf (out,"%d)%s",pai[m],fh(j));
fprintf (out,"%d)%s",pai[n],fh(k));
fprintf (out,"%d] 等于%d",pai[o],DA);
fprintf (out,"\n\n");jsq++;
}
else if((l!=m)&&(l!=n)&&(l!=o)&&(m!=n)&&(m!=o)&&(n!=o)&&
op(pai[l],
op(pai[m],
op(pai[n],pai[o],i)
,j)
,k)==DA) //过滤1
{
printf (">");
fprintf (out,"%d%s",pai[l],fh(k));
fprintf (out,"[%d%s",pai[m],fh(j));
fprintf (out,"(%d%s",pai[n],fh(i));
fprintf (out,"%d)] 等于%d",pai[o],DA);fprintf (out,"\n\n");jsq++;
}
else
{register int q,r,k;
q=op(pai[n],pai[o],j);
r=op(pai[l],pai[m],i);
if((l!=m)&&(l!=n)&&(l!=o)&&(m!=n)&&(m!=o)&&(n!=o)&&op(q,r,k)==DA) //第二
种情况过滤
{
printf (">");
fprintf (out,"(%d%s",pai[n],fh(j));
fprintf (out,"%d)%s",pai[o],fh(k));
fprintf (out,"(%d%s",pai[l],fh(i));
fprintf (out,"%d) 等于%d",pai[m],DA);fprintf (out,"\n\n");jsq++;
}
}
}
fprintf (out,"您要的正确答案总共有 %d 种",jsq);
fclose(out);
}
--
*
* *
* *
no more to say
★ just wish you ★
good luck
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.50]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店