C语言代码编程用加减乘除计算24点

因为一道算24的题,一下子没想到计算方式,所以写了个低效率的程序帮忙推算过程,在线测试网址:http://www.dooccn.com/c/

#include <stdio.h>

int main(void) { 
    int num[4] = {2,4,10,10,}; //4个待计算的数字
    char sf[4] = {'+','-','x','/',}; //运算符
    float xx,yy;  //变量,计算时会用到
    
    printf("使用%d,%d,%d,%d四个数计算24点\n",num[0],num[1],num[2],num[3]);
    
    for(int x = 0; x < 4; x++) //第1个运算符
    {
        for(int y = 0; y<4; y++) //第2个运算符
        {
            for(int z = 0; z <4; z++) //第3个运算符
            {
                    
                    for(int m = 0; m < 4;m++)   //第1个数字
                    {
                        for(int n = 0; n <4; n++)   //第2个数字
                        {
                            if(n != m)
                            {
                                for(int mm = 0; mm <4; mm++)   //第3个数字
                                {
                                    if((mm != m)&(mm != n))
                                    {
                                        for(int nn = 0; nn<4; nn++)   //第4个数字
                                        {
                                            if((nn != m)&(nn != n)&(nn != mm))
                                            {
                                                xx = 0.0;
                                                yy = 0.0;
                                                if(((y == 2)|(y == 3))&((z == 0)|(z ==1))) //特殊情况A _ b 乘或除 (c 加或减 d)
                                                {
                                                    switch(x)
                                                    {
                                                        case 0: xx = (float)num[m] + num[n];break;
                                                        case 1: xx = (float)num[m] - num[n];break;
                                                        case 2: xx = (float)num[m] * num[n];break;
                                                        case 3: xx = (float)num[m] / num[n];break;
                                                        default:printf("xxx\n");
                                                    }
                                                    switch(z)
                                                    {
                                                        case 0: yy = (float)num[mm] + num[nn];break;
                                                        case 1: yy = (float)num[mm] - num[nn];break;
                                                        default:printf("xxx\n");
                                                    }
                                                    switch(y)
                                                    {
                                                        case 2: xx = xx * yy;break;
                                                        case 3: xx = xx / yy;break;
                                                        default:printf("yyy\n");
                                                    }
                                                    if(xx == 24)
                                                    {
                                                     printf("算出来了!结果是:\n(%d %c %d) %c (%d %c %d) = 24\n",num[m],sf[x],num[n],sf[y],num[mm],sf[z],num[nn]);
                                                     return 0;
                                                    }
                                                }
                                                else
                                                {
                                                    switch(x)
                                                    {
                                                        case 0: xx = (float)num[m] + num[n];break;
                                                        case 1: xx = (float)num[m] - num[n];break;
                                                        case 2: xx = (float)num[m] * num[n];break;
                                                        case 3: xx = (float)num[m] / num[n];break;
                                                        default:printf("xxx\n");
                                                    }
                                                    switch(y)
                                                    {
                                                        case 0: xx = xx + num[mm];break;
                                                        case 1: xx = xx - num[mm];break;
                                                        case 2: xx = xx * num[mm];break;
                                                        case 3: xx = xx / num[mm];break;
                                                        default:printf("yyy\n");
                                                    }
                                                    
                                                    switch(z)
                                                    {
                                                        case 0: xx = xx + num[nn];break;
                                                        case 1: xx = xx - num[nn];break;
                                                        case 2: xx = xx * num[nn];break;
                                                        case 3: xx = xx / num[nn];break;
                                                        default:printf("zzz\n");
                                                    }
                                                    if(xx == 24)
                                                    {
                                                     printf("算出来了!从左到右计算:\n%d %c %d %c %d %c %d = 24\n",num[m],sf[x],num[n],sf[y],num[mm],sf[z],num[nn]);
                                                     return 0;
                                                    }
                                                    
                                                }
                                                
                                            }   
                                                
                                        }
                                    }
                                }
                            }
                        }
                    }
                    
            }
        }
        
    }
	printf("对不起,没计算出来。");
	return 0;
}

发表评论

邮箱地址不会被公开。 必填项已用*标注