• 寒窗轩-谢燕伟的博客

  • 关注互联网事,学习网络编程,秀计算机系统,书写心情故事。
  • 首页
  • 碎语
  • 留言
  • 关于
  • 列表
  • 登录
  • 一个24点的C程序

    [计算机]
    作者 寒川 / 2006-9-23 17:38 Saturday

    #include "stdio.h"
    #include "math.h"
    #include "time.h"

    void main()
    {
      void first();
      void second();
      int third();
      time_t t;
      int close=0;
      char get;
      clrscr();
      srand((unsigned) time(&t));
      for(;;)
      {
        clrscr();
        printf("24 POINTS SYSTEM v2.2\n");
        printf("MADE BY DANTE WANG\n");
        printf("Jul.28th 2006\n\n");
        printf("Please choose mode!\n\n");
        printf("1. Game Mode\n");
        printf("2. Count Mode\n");
        printf("3. Quit\n\n");
        get=getch();
        switch(get)
        {
          case '1': first(); break;
          case '2': second();break;
          case '3': close=third(); break;
          default: printf("Please input 1, 2 or 3!\n"); getch();
        }
        if(close)
          break;
      }
    }

    void first()
    {
      int jdgsgn(int a,int b,int c,int d);
      int n[4],i;
      char ch[100],ch1[100];
      int check(char *p);
      int exam2(char *p,int a,int b,int c,int d);
      void sign(int a,int b,int c,int d);
      double figure(char *p);
      void draw(int *p);
      for(;;)
      {
        for(i=0;i<4;i++)
        {
          n[i]=rand()%13+1;
        }
        draw(n);
        if(!jdgsgn(n[0],n[1],n[2],n[3]))
        {
          printf("No answer!");
          getch();
          continue;
        }
        gets(ch);
        if(!strcmp(strlwr(ch),"quit"))
        break;
        else
        {
          strcpy(ch1,ch);
          if(!check(ch)&&!exam2(ch,n[0],n[1],n[2],n[3])&&fabs(figure(ch1)-24)<=0.000001)
          {
    printf("\nGood job!\n");
    getch();
          }
          else
          {
    printf("\nWrong!\n\nAnswer: ");
    sign(n[0],n[1],n[2],n[3]);
    getch();
          }
        }
      }
    }

    void second()
    {
      int n[4],i;
      char c[4][10];
      int exam(char *p);
      void sign(int a,int b,int c,int d);
      double recog(char *p);
      clrscr();
      printf("Input 0 to leave.\n\n");
      for(;;)
      {
        for(i=0;i<4;i++)
        {
          scanf("%s",&c[i]);
          if(exam(c[i]))
          {
    printf("GRAMMER ERROR!\n");
    i--;
    continue;
          }
          n[i]=(int)recog(c[i]);
          if(n[i]==0)
    break;
        }
        if(n[0]&&n[1]&&n[2]&&n[3])
          sign(n[0],n[1],n[2],n[3]);
        else
          break;
      }
    }

    int third()
    {
      printf("Thanks for using this software!\n\n");
      printf("If you have any advices or suggestions,\n\n");
      printf("please call my QQ:331349451\n\n");
      getch();
      return(1);
    }

    void sign(int a,int b,int c,int d)
    {
      char *change(int x);
      double figure(char *p);
      int i[4],n,n1,n2,n3,n4,s1,s2,s3,t,flag=0;
      char s[4][2]={"+","-","*","/"},p[64]={0},p1[64]={0};
      i[0]=a;
      i[1]=b;
      i[2]=c;
      i[3]=d;
      for(n1=0;n1<4;n1++)
      {
        for(n2=0;n2<4;n2++)
        {
          if(n2==n1)
    continue;
          for(n3=0;n3<4;n3++)
          {
    if(n3==n2||n3==n1)
      continue;
    for(n4=0;n4<4;n4++)
    {
      if(n4==n3||n4==n2||n4==n1)
        continue;
      for(s1=0;s1<4;s1++)
      {
        for(s2=0;s2<4;s2++)
        {
          for(s3=0;s3<4;s3++)
          {
    strcat(p,change(i[n1]));
    strcat(p,s[s1]);
    strcat(p,change(i[n2]));
    strcat(p,s[s2]);
    strcat(p,change(i[n3]));
    strcat(p,s[s3]);
    strcat(p,change(i[n4]));
    strcpy(p1,p);
    if(fabs(figure(p1)-24)<=0.000001)
    {
      printf("%s\n",p);
      flag++;
      break;
    }
    *p='\0';
    if(s1/2==1&&(s2/2==0||s3/2==0))
    {
      strcat(p,change(i[n1]));
      strcat(p,s[s1]);
      strcat(p,"(");
      strcat(p,change(i[n2]));
      strcat(p,s[s2]);
      strcat(p,change(i[n3]));
      strcat(p,s[s3]);
      strcat(p,change(i[n4]));
      strcat(p,")");
      strcpy(p1,p);
      if(fabs(figure(p1)-24)<=0.000001)
      {
        printf("%s\n",p);
        flag++;
        break;
      }
      *p='\0';
    }
    if(s1/2==0&&s2/2==1)
    {
      strcat(p,"(");
      strcat(p,change(i[n1]));
      strcat(p,s[s1]);
      strcat(p,change(i[n2]));
      strcat(p,")");
      strcat(p,s[s2]);
      strcat(p,change(i[n3]));
      strcat(p,s[s3]);
      strcat(p,change(i[n4]));
      strcpy(p1,p);
      if(fabs(figure(p1)-24)<=0.000001)
      {
        printf("%s\n",p);
        flag++;
        break;
      }
      *p='\0';
    }
    if(s2/2==0&&s1/2==1)
    {
      strcat(p,change(i[n1]));
      strcat(p,s[s1]);
      strcat(p,"(");
      strcat(p,change(i[n2]));
      strcat(p,s[s2]);
      strcat(p,change(i[n3]));
      strcat(p,")");
      strcat(p,s[s3]);
      strcat(p,change(i[n4]));
      strcpy(p1,p);
      if(fabs(figure(p1)-24)<=0.000001)
      {
        printf("%s\n",p);
        flag++;
        break;
      }
      *p='\0';
    }
    if((s1/2==0||s2/2==0)&&s3/2==1)
    {
      strcat(p,"(");
      strcat(p,change(i[n1]));
      strcat(p,s[s1]);
      strcat(p,change(i[n2]));
      strcat(p,s[s2]);
      strcat(p,change(i[n3]));
      strcat(p,")");
      strcat(p,s[s3]);
      strcat(p,change(i[n4]));
      strcpy(p1,p);
      if(fabs(figure(p1)-24)<=0.000001)
      {
        printf("%s\n",p);
        flag++;
        break;
      }
      *p='\0';
    }
    if(s1/2==0&&s2/2==1&&s3/2==0)
    {
      strcat(p,"(");
      strcat(p,change(i[n1]));
      strcat(p,s[s1]);
      strcat(p,change(i[n2]));
      strcat(p,")");
      strcat(p,s[s2]);
      strcat(p,"(");
      strcat(p,change(i[n3]));
      strcat(p,s[s3]);
      strcat(p,change(i[n4]));
      strcat(p,")");
      strcpy(p1,p);
      if(fabs(figure(p1)-24)<=0.000001)
      {
        printf("%s\n",p);
        flag++;
        break;
      }
      *p='\0';
    }
          }
          if(flag)
    break;
        }
        if(flag)
          break;
      }
      if(flag)
        break;
    }
    if(flag)
      break;
          }
          if(flag)
    break;
        }
        if(flag)
          break;
      }
      if(flag==0)
      printf("No answer!\n");
    }

    char *change(int x)
    {
      static char a[64];
      char *c;
      c=a+63;
      *c='\0';
      c--;
      for(;;c--)
      {
        if(x>=10)
        {
          *c=x%10+'1'-1;
          x=x/10;
        }
        else
        {
          *c=x+'1'-1;
          break;
        }
      }
      return(c);
    }

    double figure(char *p)
    {
      int judge(char *p);
      int judge2(char *p);
      void add(char *p);
      void pick(char *p);
      double recog(char *p);
      char *c=p,*c1,c2[64];
      int sign,kuoh=0,flag2=0;
      double result,chu;
      add(p);
      for(sign=0;*c!='\0';c++)
      {
        if(*c=='+'||*c=='-'||*c=='*'||*c=='/'||*c=='('||*c==')')
        {
          sign++;
          break;
        }
    }
      if(sign==0)
        return(recog(p));
      else
      {
        c=p;
        for(;*c!='\0';c++)
        {
          if(*c=='(')
    kuoh++;
          if(*c==')')
    kuoh--;
          if(!judge2(c))
          {
    if(*c=='+'&&kuoh==0)
    {
      *c='\0';
      result=figure(p)+figure(c+1);
      flag2++;
      break;
    }
    if(*c=='-'&&kuoh==0)
    {
      *c='\0';
      result=figure(p)-figure(c+1);
      flag2++;
      break;
    }
          }
          if(!judge(c))
          {
    if(*c=='*'&&kuoh==0)
    {
      *c='\0';
      result=figure(p)*figure(c+1);
      flag2++;
      break;
    }
    if(*c=='/'&&kuoh==0)
    {
      *c='\0';
      chu=figure(c+1);
      if(chu==0)
      {
        result=99999;
      }
      else
      {
        result=figure(p)/chu;
      }
      flag2++;
      break;
    }
          }
        }
        if(flag2)
          return(result+0);
        else
        {
          pick(p);
          result=figure(p);
          return(result+0);
        }
      }
    }

    int judge(char *p)
    {
      char *c=p;
      int kuoh=0,flag=0;
      for(c++;*c!='\0';c++)
      {
        if(*c=='(')
        kuoh++;
        if(*c==')')
        kuoh--;
        if(kuoh==0&&(*c=='+'||*c=='-'||*c=='*'||*c=='/'))
        {
          flag++;
          break;
        }
      }
      return(flag);
    }

    int judge2(char *p)
    {
      char *c=p;
      int kuoh=0,flag=0;
      for(c++;*c!='\0';c++)
      {
        if(*c=='(')
        kuoh++;
        if(*c==')')
        kuoh--;
        if(kuoh==0&&(*c=='+'||*c=='-'))
        {
          flag++;
          break;
        }
      }
      return(flag);
    }

    void add(char *p)
    {
      char *c=p,b[64];
      int flag=0;
      for(;*c!='\0';c++)
      {
        if((*c=='-'||*c=='+')&&(*(c+1)>='0'&&*(c+1)<='9'))
          flag++;
        if((*c>='0'&&*c<='9'||*c=='.')&&(*(c+1)=='*'||*(c+1)=='/'||*(c+1)=='+'||*(c+1)=='-'))
        {
          flag++;
          break;
        }
        if((*c>='0'&&*c<='9'||*c=='.')&&*(c+1)==')')
        {
          break;
        }
      }
      if(flag==2)
        flag=1;
      else
        flag=0;
      if(flag)
      {
        c=p;
        for(;*c!='\0';c++)
        {
          if(*(c+1)>='0'&&*(c+1)<='9')
          {
    if(*c=='+'||*c=='-')
    {
      strcpy(b,c);
      *c='(';
      strcpy(c+1,b);
    }
    break;
          }
        }
        c+=2;
        for(;*c!='\0';c++)
        {
          if((*c<'0'||*c>'9')&&*c!='.')
          {
    strcpy(b,c);
    *c=')';
    strcpy(c+1,b);
    break;
          }
        }
      }
    }

    void pick(char *p)
    {
      char *c=p;
      if(*c=='('&&*(c+strlen(c)-1)==')')
      {
        strcpy(c,c+1);
        *(c+strlen(c)-1)='\0';
      }
    }


    double recog(char *p)
    {
      char *c=p;
      int flag=0,number;
      double quan,ans=0;
      for(;;c++)
      {
        if(*c=='.')
        {
          flag++;
          number=c-p;
        }
        if(*c!='.'&&(*c<'0'||*c>'9'))
          break;
      }
      if(flag==0)
      {
        for(quan=1,c--;c>=p;c--,quan*=10)
        ans+=(*c-'1'+1)*quan;
      }
      else
      {
        for(c--,quan=pow(10,number-(c-p));c>=p;c--)
        {
          if(*c=='.')
    continue;
          else
          {
    ans+=(*c-'1'+1)*quan;
    quan*=10;
          }
        }
      }
      return(ans);
    }

    int exam(char *p)
    {
      double recog(char *p);
      char *c=p;
      int number=0;
      for(;*c!='\0';c++)
      {
        if(*c>'9'||*c<'0')
          number++;
        if(number)
          break;
      }
      if(!number)
      {
        if(recog(p)>13||recog(p)<0)
    number++;
      }
      return(number);
    }

    void draw(int *p)
    {
      time_t t;
      int n;
      clrscr();
      printf("Press \"quit\" to leave.");
      srand((unsigned) time(&t));
      for(n=0;n<4;n++)
      {
        gotoxy(1+7*n,3);
        printf("\xda\xc4\xc4\xc4\xc4\xbf");
        gotoxy(1+7*n,4);
        printf("\xb3%c   \xb3",rand()%4+3);
        gotoxy(1+7*n,5);
        printf("\xb3    \xb3");
        gotoxy(1+7*n,6);
        switch(*(p+n))
        {
          case 1:
    printf("\xb3   A\xb3");
    break;
          case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:
    printf("\xb3%4d\xb3",*(p+n));
    break;
          case 11:
    printf("\xb3   J\xb3");
    break;
          case 12:
    printf("\xb3   Q\xb3");
    break;
          case 13:
    printf("\xb3   K\xb3");
        }
        gotoxy(1+7*n,7);
        printf("\xc0\xc4\xc4\xc4\xc4\xd9");
        gotoxy(1,9);
      }
    }

    int jdgsgn(int a,int b,int c,int d)
    {
      char *change(int x);
      double figure(char *p);
      int i[4],n,n1,n2,n3,n4,s1,s2,s3,t,flag=0;
      char s[4][2]={"+","-","*","/"},p[64]={0},p1[64]={0};
      i[0]=a;
      i[1]=b;
      i[2]=c;
      i[3]=d;
      for(n1=0;n1<4;n1++)
      {
        for(n2=0;n2<4;n2++)
        {
          if(n2==n1)
    continue;
          for(n3=0;n3<4;n3++)
          {
    if(n3==n2||n3==n1)
      continue;
    for(n4=0;n4<4;n4++)
    {
      if(n4==n3||n4==n2||n4==n1)
        continue;
      for(s1=0;s1<4;s1++)
      {
        for(s2=0;s2<4;s2++)
        {
          for(s3=0;s3<4;s3++)
          {
    strcat(p,change(i[n1]));
    strcat(p,s[s1]);
    strcat(p,change(i[n2]));
    strcat(p,s[s2]);
    strcat(p,change(i[n3]));
    strcat(p,s[s3]);
    strcat(p,change(i[n4]));
    strcpy(p1,p);
    if(fabs(figure(p1)-24)<=0.000001)
    {
      flag++;
      break;
    }
    *p='\0';
    if(s1/2==1&&(s2/2==0||s3/2==0))
    {
      strcat(p,change(i[n1]));
      strcat(p,s[s1]);
      strcat(p,"(");
      strcat(p,change(i[n2]));
      strcat(p,s[s2]);
      strcat(p,change(i[n3]));
      strcat(p,s[s3]);
      strcat(p,change(i[n4]));
      strcat(p,")");
      strcpy(p1,p);
      if(fabs(figure(p1)-24)<=0.000001)
      {
        flag++;
        break;
      }
      *p='\0';
    }
    if(s1/2==0&&s2/2==1)
    {
      strcat(p,"(");
      strcat(p,change(i[n1]));
      strcat(p,s[s1]);
      strcat(p,change(i[n2]));
      strcat(p,")");
      strcat(p,s[s2]);
      strcat(p,change(i[n3]));
      strcat(p,s[s3]);
      strcat(p,change(i[n4]));
      strcpy(p1,p);
      if(fabs(figure(p1)-24)<=0.000001)
      {
        flag++;
        break;
      }
      *p='\0';
    }
    if(s2/2==0&&s1/2==1)
    {
      strcat(p,change(i[n1]));
      strcat(p,s[s1]);
      strcat(p,"(");
      strcat(p,change(i[n2]));
      strcat(p,s[s2]);
      strcat(p,change(i[n3]));
      strcat(p,")");
      strcat(p,s[s3]);
      strcat(p,change(i[n4]));
      strcpy(p1,p);
      if(fabs(figure(p1)-24)<=0.000001)
      {
        flag++;
        break;
      }
      *p='\0';
    }
    if((s1/2==0||s2/2==0)&&s3/2==1)
    {
      strcat(p,"(");
      strcat(p,change(i[n1]));
      strcat(p,s[s1]);
      strcat(p,change(i[n2]));
      strcat(p,s[s2]);
      strcat(p,change(i[n3]));
      strcat(p,")");
      strcat(p,s[s3]);
      strcat(p,change(i[n4]));
    strcpy(p1,p);
      if(fabs(figure(p1)-24)<=0.000001)
      {
        flag++;
        break;
      }
      *p='\0';
    }
    if(s1/2==0&&s2/2==1&&s3/2==0)
    {
      strcat(p,"(");
      strcat(p,change(i[n1]));
      strcat(p,s[s1]);
      strcat(p,change(i[n2]));
      strcat(p,")");
      strcat(p,s[s2]);
      strcat(p,"(");
      strcat(p,change(i[n3]));
      strcat(p,s[s3]);
      strcat(p,change(i[n4]));
      strcat(p,")");
      strcpy(p1,p);
      if(fabs(figure(p1)-24)<=0.000001)
      {
        flag++;
        break;
      }
      *p='\0';
    }
          }
          if(flag)
    break;
        }
        if(flag)
          break;
      }
      if(flag)
        break;
    }
    if(flag)
      break;
          }
          if(flag)
    break;
        }
        if(flag)
          break;
      }
      return(flag);
    }

    int exam2(char *p,int a,int b,int c,int d)
    {
      double recog(char *p);
      int number=0,num[4],flag=0,n,m;
      num[0]=a;
      num[1]=b;
      num[2]=c;
      num[3]=d;
      for(m=0;*p!='\0';p++,m++)
      {
        if(*p>='0'&&*p<='9'&&(*(p+1)>'9'||*(p+1)<'0'))
          number++;
        if(m>0&&*p>='0'&&*p<='9'&&*(p-1)>='0'&&*(p-1)<='9')
          continue;
        if(*p<='9'&&*p>='0')
        {
          if(recog(p)>13||recog(p)<1)
          {
    flag++;
    break;
          }
          else
          {
    for(n=0;n<4;n++)
    {
      if(recog(p)==num[n])
      {
        num[n]=0;
        break;
      }
    }
          }
        }
      }
      if(!flag)
      {
        if(number!=4)
          flag++;
        else
          if(num[1]||num[2]||num[3]||num[0])
    flag++;
      }
      return(flag);
    }

    int check(char *p)
    {
      int kuoh=0,flag=0;
      for(;*p!='\0';p++)
      {
        if(*p==' ')
        {
          flag++;
          break;
        }
        if(kuoh<0)
        {
          flag++;
          break;
        }
        if(*p=='(')
          kuoh++;
        if(*p==')')
          kuoh--;
        if((*p=='+'||*p=='-'||*p=='*'||*p=='/')&&(*(p+1)=='*'||*(p+1)=='/'||*(p+1)=='+'||*(p+1)=='-'))
        {
          flag++;
          break;
        }
        if(*p=='('&&(*(p+1)>'9'||*(p+1)<'0'&&*(p+1)!='-'))
        {
          flag++;
          break;
        }
        if(*p==')'&&*(p+1)!='+'&&*(p+1)!='-'&&*(p+1)!='*'&&*(p+1)!='/'&&*(p+1)!='\0')
        {
          flag++;
          break;
        }
      }
      if(!flag)
      {
        if(kuoh!=0)
          flag++;
      }
      return(flag);
    }

    标签: 心情 编程

    您可能还喜欢(Maybe You Would Like):

    asp+access+wml网页编程:asp读取access数据分页输出到手机客户端

    洗衣

    毕业实习日记

    批量设置连接在新窗口打开

    上网中

    « 网页中加入在线lrc歌词的方法 | C语言写的一个万年历»

    引用地址:

    发表评论:

    未显示?请点击刷新

  • 博客主

      blogger
    • 寒川
    • 很懒的一个家伙。。。。
  • 搜寻

  • 日志分类

    • 网页编程(56) 订阅该分类
    • 计算机(25) 订阅该分类
    • 幽默笑话(1) 订阅该分类
    • 互联网事(26) 订阅该分类
    • 点滴心情(64) 订阅该分类
    • 精选软件(5) 订阅该分类
  • 最近日志

    • 伤心的虚拟主机
    • 夏普sharp ar-2918 显示小人和小太阳灯一直亮清除方法
    • 周未平乐古镇一日游
    • 如何用正则表达式匹配指定字符开始和指定字符结束
    • excel表格中页码从第n页开始
    • JPG、RAR合并器,可将rar转为jpg。
    • php zend加密破解软件
    • PHP版OAuth认证协议中的HMACSHA1加密算法(签名方法)
    • OAuth认证协议原理分析及使用方法(转)
    • php curl利用嘀咕、搜狐微博API发布微博
    • php curl写个新浪发sina微博的API接口
    • Qzone日志插件发布了
    • 这只是一个测试日志
    • 准备用心做个网站
    • php过滤html标签
  • 随机日志

    • 我也发个飞信API接口发飞信短消息。
    • 终于下雨了
    • access的mdb数据库长期使用变大的处理办法
    • 网事札想
    • 计算php代码执行时间
    • 分享一个支持中文字符及英文字符混合的php字符串分割函数
    • php检查数组中是否含有指定字符
    • 突然没了电话会咋样?
    • php实现SEO伪原创同义词替换函数
    • 圣诞节即将到来
    • word使用技巧,插入带圈的数字。
    • 记录一下这一伟大历史的开心时刻
    • Google Font API打造美轮美奂的网页字体
    • 锻炼
    • 更新一下友情链接插件
  • 最新评论

    • ugg boots
      怎么样啊,看楼...
    • ugg uk
      博主很厉害呀,...
    • ugg boot
      怎么样啊?
    • 中华E商网
      .          \...
    • 小灰
      同情 中国垃圾i...
    • 天籁De路过之
      一不小心又来看...
    • timberland boots
      看来我还不够成...
    • timberland boots
      风景很不错啊.....
    • timberland boots
      呵呵呵 学到一个...
    • ugg boots uk
      进来看看,又学...
  • 日志档案

    • 2010年9月(2)
    • 2010年8月(8)
    • 2010年7月(13)
    • 2010年6月(18)
    • 2010年5月(24)
    • 2010年4月(10)
    • 2010年3月(14)
    • 2010年2月(6)
    • 2010年1月(7)
    • 2009年11月(2)
    • 2009年10月(3)
    • 2009年9月(3)
    • 2009年8月(8)
    • 2009年7月(15)
    • 2009年6月(14)
    • 2009年4月(2)
    • 2008年12月(1)
    • 2008年6月(1)
    • 2008年5月(10)
    • 2008年4月(9)
    • 2008年3月(5)
    • 2008年2月(2)
    • 2008年1月(5)
    • 2007年12月(4)
    • 2006年9月(6)
    • 2006年7月(1)
  • 网络链接

    • 点滴记忆
    • 鼠标生活
    • 游戏攻略网
    • 西南精细化工信息网
    • 寒窗轩
    • 思远技术
    • 美图秀秀教程小屋
    • 陈旭辉的博客
    • Sの秘密基地
    • 冰博客主
    • 职称论文
    • 命运的陶醉
    • CrazyBo's Blog!
    • Live or Death
    • Web前端开发
    • Raysir's Home
    • 婴倍佳母婴博客
    • 柒月柒日晴’Blog
    • 恋过
    • 邹城论坛
    • Glacier's Blog
    • 网站运营方案
    • 陈旭辉的博客
    • 快乐忆站
    • 网站运营方案
    • 岳成立情感博客
    • 累了,叭杆烟
    • Scarecrow、小黑
    • 天籁De路过之
    • Emlog讨论组
  • 信息统计

    • 日志数量:193
    • 评论数量:449
    • 引用数量:1
    • 今日访问:707
    • 总访问量:176491
订阅Rss
Powered by emlog3.5.2 沪ICP备09072012号