24点

来源:互联网 发布:求100到200的素数js 编辑:程序博客网 时间:2024/04/28 04:27
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
double operation(double a1, double a2, int b)/*自定义函数,用于进行两个数之间的运算*/
{
    switch (b)
    {
        case 0:
            return (a1 + a2);/*返回两数相加的值*/
        case 1:
            return (a1 - a2);/*返回两数相减的值*/
        case 2:
            return (a1 *a2);/*返回两数相乘的值*/
        case 3:
            return (a1 / a2);/*返回两数相除的值*/
    }
}
 
 int main()
{ srand((unsigned)time(NULL));
    int t,i, j, k, l, n, m, r,data[4],a[4]={0};
    double num[4] ={0}, res1, res2, res3;
    char sign[5] = "+-*/",ch;
    printf("随机生成的四个数为:\n"); 
    for (i = 0; i < 4; i++)
    { scanf("%lf",num+i);
         //num[i]=rand()%13;
        data[i] = num[i];
        printf("%d",data[i]);
 printf("\n");
    }


printf("按任意键输出所有答案:\n");
printf("正确结果为:\n");/*输出所有结果*/
  for (i = 0; i < 4; i++)
    for (j = 0; j < 4; j++)
    if (j!=i)
    {
        for (k = 0; k < 4; k++)
        if (k!= i && k != j)
        {
            for (l = 0; l < 4; l++)
            if (l!=i && l!=j && l != k)
            {
                for (n = 0; n < 4; n++)
                for (m = 0; m < 4; m++)
                for (r = 0; r < 4; r++)
                {
                    res1 = operation(num[i], num[j], n);
                    res2 = operation(res1, num[k], m);
                    res3 = operation(res2, num[l], r);
                    if (res3 == 24.0)
                printf("[(%d%c%d)%c%d]%c%d=24\n", data[i],
                                    sign[n], data[j], sign[m], data[k], sign[r],
                                    data[l]);/*若结果为24则按正常顺序输出*/
                            else if (res3 ==  - 24.0)
                printf("[%d%c(%d%c%d)]%c%d=24\n",data[k],
                                    sign[m],data[i], sign[n], data[j], sign[r],
                                   data[l]);/*调整输出顺序*/
                            else if (res3 == 1.0 / 24.0)
                printf("%d%c[(%d%c%d)%c%d]=24\n", data[l],
                                    sign[r], data[i], sign[n],data[j], sign[m],
                                   data[k]);/*调整输出顺序*/
                            else if (res3 ==  - 1.0 / 24.0)
                printf("%d%c[%d%c(%d%c%d)]=24\n", data[l],
                                    sign[r], data[k], sign[n], data[i], sign[m],
                                    data[j]);/*调整输出顺序*/
                            else
                    {
                        res1 = operation(data[i], data[j], n);
                        res2 = operation(data[k], data[l], r);
                        res3 = operation(res1, res2, m);
                        if (res3 == 24.0)/*判断结果是否为24*/
                                    printf("(%d%c%d)%c(%d%c%d)=24\n", data[i],
                                        sign[n], data[j], sign[m], data[k],
                                        sign[r], data[l]);




                    }
                    
            
   }
            }
        }
    }
    
    getch();
}