碌碌无为的程序猿 2019-06-26 09:49 采纳率: 100%
浏览 501
已采纳

超简单的C语言题目,高分悬赏

【请按照题目要求回答,谢谢】

编写一个C语言程序实现以下功能:1、输入1〜13范围内的4个整数(可以有重复);2、对它们进行加、减、乘、除四则运算后(可以任意的加括号限定计算的优先级);3、将运算结果等于24的所有运算式子找出来并输出。

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-06-26 09:53
    关注
    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    
    int chu(int p,int q)   //除法运算
    {
        if(p%q==0)
            return p/q;
        else
            return 111111; 
    }
    
    
    
    int fun(int i,int j,int c)    //c(局部变量)选择运算符,i,j为运算数字
    {
        int s;
        switch(c)
        {
        case 1:  s=i+j;break;
        case 2:  s=i-j;break;
        case 3:  s=i*j;break;
        case 4:  s=chu(i,j);break;
        }
        return s;
    }
    
    
    void print(int c)     //c(局部变量)选择输出运算符
    {
        if(c==1)printf("+");
        else if(c==2)printf("-");
        else if(c==3)printf("*");
        else printf("/");
    }
    
    
    int main()
    {
        int f[4];//四个1-13的数
        int i,j,m,n;
        int a,b,c;//符号
        int d1,d2,d3; //每步的结果
        srand(time(NULL));   //随机生成四个数字(四张扑克牌)
        for(int w=0;w<4;w++)  
        {
            f[w]=rand()%13+1;    //生成随机数范围在1~13
        }
        for(w=0;w<4;w++)
        {
            printf("%d ",f[w]);
        }
        printf("\n");
        for(i=0;i<4;i++)
            for(j=0;j<4;j++)
                if(j!=i)
                    for(m=0;m<4;m++)
                        if(m!=i&&m!=j)
                            for(n=0;n<4;n++)
                                if(n!=i&&n!=j&&n!=m)            //四个数字的位置不可重复且多重可能置换位置运算
                                    for(a=1;a<5;a++)        
                                        for(b=1;b<5;b++)
                                            for(c=1;c<5;c++)       //选择四个数字中间的三个运算符,皆有四种可能
                                            {                             //避免了对括号的思考,转化为二元运算
                                                d1=fun(f[i],f[j],a);     
                                                d2=fun(d1,f[m],b);      //用前两个数字的运算结果代替
                                                d3=fun(d2,f[n],c);     //同理,两两运算,递归过程
                                                if(d3==24)
                                                {
                                                    printf("%d",f[i]);
                                                    print(a);
                                                    printf("%d",f[j]);
                                                    print(b);
                                                    printf("%d",f[m]);
                                                    print(c);
                                                    printf("%d=24\n",f[n]);
                                                }
                                            }
                                            return 0;
    }
    

    https://blog.csdn.net/qq_36575519/article/details/70147381

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在树莓派上检测不同地方的 wifi 信号强度(相关搜索:用c语言)
  • ¥15 求一个临界热流密度查询表程序
  • ¥15 关于浏览器调试工具断点失效的问题
  • ¥15 pubsub.js无法订阅到消息
  • ¥15 非正弦供电多相感应电机毕业设计
  • ¥15 请用asp语言将得到一组数组转换为图片
  • ¥15 stm32f103c8t6采集HLK-LD2450毫米波雷达传感器数据并打印显示距离和角度
  • ¥15 不重复生成字母+数字交易号
  • ¥15 AD封装导入后层混乱了
  • ¥15 如何将excel中的数据导入ansys中