LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: scream

如何用c写一个算24的小游戏

[复制链接]
发表于 2004-5-15 12:08:48 | 显示全部楼层
为什么一个24点的程序会那么长啊?我觉得程序还是精短的好哦.
像那个合用if罗列组合的程序,一看那架势就不敢细看了.
我觉得编程和解数学题一样,除了要结果正确外,还要追求一种美吧.
可能大家会不赞同,不过这却是我一向的追求.
发表于 2004-5-15 12:27:06 | 显示全部楼层
最初由 fishingbird 发表
为什么一个24点的程序会那么长啊?我觉得程序还是精短的好哦.
像那个合用if罗列组合的程序,一看那架势就不敢细看了.
我觉得编程和解数学题一样,除了要结果正确外,还要追求一种美吧.
可能大家会不赞同,不过这却是我一向的追求.


把你的美程序拿出来溜溜
发表于 2004-5-15 18:14:41 | 显示全部楼层
以后会有的.
发表于 2004-5-16 20:20:50 | 显示全部楼层
太好了!
发表于 2004-12-9 16:57:49 | 显示全部楼层
感觉上面的那个兄弟用宏定义不是太好 呵呵 不过已经很了不起了
发表于 2004-12-10 09:25:52 | 显示全部楼层
o my god!

要是这道题要求用八个数来做,这个程序不知道要写成什么样了。


刚才没看到第三页,现在好多了。
发表于 2004-12-10 10:35:19 | 显示全部楼层
我以前写过一个算5个5的24点算法,临时写的,输入输出不是很规范
输出4次计算所用的算符和计算的位置(总共计算4次,在4个位置上),给楼主做参考

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. /*
  4. * 5个5算24点
  5. * main函数中生成所有计算顺序的排列组合
  6. * check函数计算该组合是否可以得到24
  7. * c: 放原操作数,并保存计算结果
  8. * d: 标记是否计算过
  9. * a: 操作符
  10. * b: 计算顺序
  11. */
  12. void check( int a[4], int b[4] ) /* a: operator, b:sequence */
  13. {
  14.         int                i, j, k;
  15.         float        c[5];
  16.         float        t1, t2;
  17.         int                d[5];
  18.         char        ch;

  19.         for( i=0;i<5;i++ ) {
  20.                 c[i]=5;
  21.                 d[i]=-1;
  22.         }

  23.         for( i=0;i<4;i++ ) {
  24.                 k = b[i];

  25.                 j = k;
  26.                 while(d[j]!=-1) j=d[j];
  27.                 t1 = c[j];

  28.                 j = k+1;
  29.                 while(d[j]!=-1) j=d[j];
  30.                 t2 = c[j];

  31.                 switch(a[k]) {
  32.                 case 0:
  33.                         t1 = t1+t2;
  34.                         break;
  35.                 case 1:
  36.                         t1 = t1-t2;
  37.                         break;
  38.                 case 2:
  39.                         t1 = t1*t2;
  40.                         break;
  41.                 case 3:
  42.                         t1 = t1/t2;
  43.                         break;
  44.                 }

  45.                 d[k+1] = k;
  46.                 j = k;
  47.                 while(d[j]!=-1) j=d[j];
  48.                 c[j] = t1;
  49.         }

  50.         if( c[0]>=23.99 && c[0]<=24.01 ) {
  51.                 for( i=0;i<4;i++ ) {
  52.                         switch( a[i] ) {
  53.                                 case 0: ch = '+'; break;
  54.                                 case 1: ch = '-'; break;
  55.                                 case 2: ch = '*'; break;
  56.                                 case 3: ch = '/'; break;
  57.                         }
  58.                         printf("%c,", ch);
  59.                 }
  60.                 printf(" -- ");
  61.                 for( i=0;i<4;i++ ) printf("%d,", b[i]+1);
  62.                 printf("\n");
  63.         }
  64. }

  65. void main()
  66. {
  67.         int        a[4], b[4];
  68.         int        c[24][4];
  69.         int        i,j,k;
  70.         int        t;
  71.         int        flag;
  72.         int        mask;

  73.         int e[4] = { 2,2,1,3 };
  74.         int f[4] = { 0,1,2,3 };

  75.         k=0;
  76.         for( j=0;j<=0xff;j++ ) {

  77.                 flag = 0;

  78.                 for( i=0, mask=3;i<=3;i++,mask<<=2 ) {
  79.                         t = (j&mask)>>(i*2);
  80.                         b[i] = t;
  81.                         a[i] = 0;
  82.                 }

  83.                 for( i=0;i<4;i++ ) {
  84.                         if( a[b[i]]==1 ) flag=1;
  85.                         a[b[i]]=1;
  86.                 }

  87.                 if( flag==0 ) {
  88.                         for( i=0;i<4;i++ ) {
  89.                                 c[k][i] = b[i];
  90.                         }
  91.                         k++;
  92.                 }
  93.         }

  94.         for( j=0;j<=0xff;j++ ) {

  95.                 for( i=0, mask=3;i<=3;i++,mask<<=2 ) {
  96.                         t = (j&mask)>>(i*2);
  97.                         a[i] = t;
  98.                 }

  99.                 for( i=0;i<24;i++ ) check(a, c[i]);
  100.         }
  101. }
复制代码
发表于 2004-12-12 10:51:38 | 显示全部楼层
请问 jerboa版主 ,
A: 你的那个程序 在LINUX 下面执行了多长时间啊
B:为什么我执行了1 分钟 在退出了啊?
C:while(1)怎么会退出呢?
发表于 2004-12-12 10:51:49 | 显示全部楼层
请问 jerboa版主 ,
A: 你的那个程序 在LINUX 下面执行了多长时间啊
B:为什么我执行了1 分钟 在退出了啊?
C:while(1)怎么会退出呢?
发表于 2006-9-1 13:42:55 | 显示全部楼层
这个程序也太大了吧!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表