发个六年前在校时编写的程序感慨一下...

blackvis 2013-06-06 01:37:34
今天CSDN上关于编程挑战有一道关于算24的题目,一看这题就勾起了我久远的回忆。

当时在学校,大一的时候听学长说C语言很重要,有必要学习一下。
于是乎大一寒假期间图书馆借了一本C语言就开始啃!那时候越看越带劲,理解起来很慢,但一旦将一个

理论理解透了,那种成就感就油然而生..
直到大二上学期(也可能是大一下学期)的时候,C语言正式开课,所以那时候学的时候自然很轻松,于

是乎,有一天宿舍讨论一个关于算24的问题 5 5 5 1, 怎么组合成24,当时想很久没想出答案,凭我对

程序的敏感,我确信凭我的能力一定可用编写出这样的问题来,输入4个数然后输出结果。

于是经过不断的修改完善,编写了半个多月的程序,终于调试成功!
现在看来,当时神一样的代码,神一样的命名方式,除了一个自定义函数有点技术含量,其他都是完全

硬啃,硬记。还有当时也没有断点调试,基本就靠printf输出,代码也不能格式化,也没有特殊颜色 完

全就靠记事本编写出来的。 现在想想那时候的写代码才真正的有激情,现在啊,激情被现实逐渐一点

一点的褪去...

下面是曾经调试好之后原封不动的代码.(EXE文件,在我上传的资源中应该有的)
#include"stdio.h"
float js(float a,char s, float b)
{
if (s== '+') return a+b ;
if (s== '-') return a-b ;
if (s== '*') return a*b ;
if (s== '/') return a/b ;
}
void main()
{
FILE *fp;
int i1,i2,i3,i4,j1,j2,j3,k1,k2,k3;
int a[4];
int fuhao1,fuhao2,fuhao3;
long p=0;
float jg1=0,jg2=0,jg3=0;
char e[4]={'+','-','*','/'};

if((fp=fopen("result.txt","w"))==NULL) /*open file fs.txt */
{printf("open error!\N");exit(0); }

printf("please enter four number you want\n");
for(i1=0;i1<=3;i1++)
{
scanf("%d",&a[i1]);
fprintf(fp,"%d ",a[i1]);
}
fputs("四个数组合成24的方法有如下\n",fp);
for (i1=0;i1<4;i1++)
for (i2=0;i2<4;i2++)
{ if (i2==i1)continue;
for (i3=0;i3<4;i3++)
{ if (i3==i2 || i3==i1) continue;
for (i4=0;i4<4;i4++) /* 三层循环把所有情况都枚举到 */
{
if(i4==i3 || i4==i2 || i4==i1) continue;
for(j1=0;j1<4;j1++) /* 四种符号依次分别放在一开始的两个数字中间进行运算 */
{
if(j1==3 && a[i2]==0) continue; /* 当符号为(除) 且分母为零的时候,下一轮循环 */
jg1=js(a[i1],e[j1],a[i2]); /* 进行各种组合,的加减乘除,每中情况的结果存到变量jg1中,进行下步的运算 */
for(j2=0;j2<4;j2++)
for (fuhao1=0;fuhao1<2;fuhao1++) /* 当第三个数添加的时候分两中情况,一种是在原两位的前面,一种是后面*/
{
if(fuhao1==0 )
{if ( j2==3 && a[i3]==0 ) /*算法为除 且分母为零则下一轮循环 */
continue;
jg2=js(jg1,e[j2],a[i3]);} /*第三个数添加在后面 */
else if(fuhao1==1 && (j2==1 || j2==3)) /* 只有减和除的时候需要考虑前后问题 例如a+b和b+a效果一样*/
{ if(j2==3 && jg1==0) /*算法为除 且分母为零则下一轮循环 */
continue;
jg2=js(a[i3],e[j2],jg1);} /*第三个数添加在前面 */
for(j3=0;j3<4;j3++)
for(fuhao2=0;fuhao2<2;fuhao2++) /*第四个数添加进去,并分两中情况, 以下 同上面*/
{
if (fuhao2==0)
{ if(j3==3 && a[i4]==0)
continue;
jg3=js(jg2,e[j3],a[i4]);}
else if (fuhao2==1 && (j3==1 || j3==3))
{ if(j3==3 && jg2==0)
continue;
jg3=js(a[i4],e[j3],jg2);}

if(jg3==24 || (jg3-24>0 && (jg3-24)<0.0001) || (jg3-24<0 && (24-jg3)<0.0001)) /* 当最终结果为24当有分数计算时候,浮点数处理~ 时输出答案 */
{ p++;
/* printf("shyanshiyasn%d\n",p); */
if (fuhao1==0 && fuhao2==0){
fprintf(fp,"((%d%c%d)%c%d)%c%d=%3.2f\n",a[i1],e[j1],a[i2],e[j2],a[i3],e[j3],a[i4],jg3);
printf("((%d%c%d)%c%d)%c%d=%3.2f\n",a[i1],e[j1],a[i2],e[j2],a[i3],e[j3],a[i4],jg3);}
if (fuhao1==1 && fuhao2==0){
fprintf(fp,"(%d%c(%d%c%d))%c%d=%3.2f\n",a[i3],e[j2],a[i1],e[j1],a[i2],e[j3],a[i4],jg3);
printf("(%d%c(%d%c%d))%c%d=%3.2f\n",a[i3],e[j2],a[i1],e[j1],a[i2],e[j3],a[i4],jg3);}
if (fuhao1==0 && fuhao2==1){
fprintf(fp,"%d%c((%d%c%d)%c%d)=%3.2f\n",a[i4],e[j3],a[i1],e[j1],a[i2],e[j2],a[i3],jg3);
printf("%d%c((%d%c%d)%c%d)=%3.2f\n",a[i4],e[j3],a[i1],e[j1],a[i2],e[j2],a[i3],jg3);}
if (fuhao1==1 && fuhao2==1){
fprintf(fp,"%d%c(%d%c(%d%c%d))=%3.2f\n",a[i4],e[j3],a[i3],e[j2],a[i1],e[j1],a[i2],jg3);
printf("%d%c(%d%c(%d%c%d))=%3.2f\n",a[i4],e[j3],a[i3],e[j2],a[i1],e[j1],a[i2],jg3);}

}

}
}
}

/* the second case 第二中情况,如 (a+b)*(c+d)这中情况上面没有考虑到 */
for (k1=0;k1<4;k1++)
{
if (k1==3 && a[i2]==0)
continue;
jg1=js(a[i1],e[k1],a[i2]);
for (k2=0;k2<4;k2++)
{
if(k2==3 && a[i4]==0) continue;
jg2=js(a[i3],e[k2],a[i4]);
for (k3=0;k3<4;k3++)
{
if (k3==3 && jg2==0) continue;
jg3=js(jg1,e[k3],jg2);
if(jg3==24 || (jg3-24>0 && (jg3-24)<0.0001) || (jg3-24<0 && (24-jg3)<0.0001)) /* 当最终结果为24时输出答案 */
{ p++;
/* printf("shyanshiyasn%d\n",p); */
printf("(%d%c%d)%c(%d%c%d)=24\n",a[i1],e[k1],a[i2],e[k3],a[i3],e[k2],a[i4]);
fprintf(fp,"(%d%c%d)%c(%d%c%d)=24\n",a[i1],e[k1],a[i2],e[k3],a[i3],e[k2],a[i4]);
}
}
}
}


}
}
}

fprintf(fp,"the count of the answer is%ld\n",p);
printf("the count of the answer is%ld\n you can find the answer in result.txt\n",p);
fclose(fp);
printf("press any number key like 0,1.then enter to exit\n"); /* 控制屏幕最后停留 */
scanf("%d",&i1);


}

...全文
316 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
maxlizmouse 2013-06-06
  • 打赏
  • 举报
回复
只会用递归的CRUD码奴低调撸过
凉凉二点凉 2013-06-06
  • 打赏
  • 举报
回复
哎哟不错哦,这个吊
笑容融化坚冰 2013-06-06
  • 打赏
  • 举报
回复
楼主牛x,而且你们宿舍也牛x,还讨论算法问题,当年我们宿舍只讨论怎么打电脑游戏。结果是现在碰到算法问题就痿了。
昵称很不好取 2013-06-06
  • 打赏
  • 举报
回复
碉堡了。。。。。。。 除了main函数有点长
  • 打赏
  • 举报
回复
楼下怎么看。。。
  • 打赏
  • 举报
回复
碉堡了。。。。。。。
  • 打赏
  • 举报
回复

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧