算24点 C++

来源:互联网 发布:myeye cms监控软件 编辑:程序博客网 时间:2024/06/05 00:18

其实这道题木有什么困难,先放题目吧!
【 问题描述】
几十年前全世界就流行一种数字游戏, 至今仍有人乐此不疲. 在中国我们把
这种游戏称为“ 算 24 点”。 您作为游戏者将得到 4 个 1~9 之间的自然数作为
操作数, 而您的任务是对这 4 个操作数进行适当的算术运算, 要求运算结果等
于 24 。
你可以使用的运算只有: + , - , * , / , 您还可以使用() 来改变运
算顺序。 注意: 所有的中间结果须是正整数, 所以一些除法运算是不允许的( 例
如, ( 2*2 ) /4 是合法的, 2* ( 2/4 ) 是不合法的)。 下面我们给出一个游戏的具
体例子:
若给出的 4 个操作数是: 1 、 2 、 3 、 7 , 则一种可能的解答是
1+2+3*7=24 。
【 输入】
只有一行, 四个 1 到 9 之间的自然数。
【 输出】
输出一行, 如果可以得到 24, 输出“ YES”; 否则, 输出“ NO”。
【 样例】
Point24. In
5 5 5 1
Point24. Out
YES

稍微思考一下,发现这道题目并没有说明位置能不能变化,所以,我们可以把这四个数的排列算出来!!
1.将四个数视为一个集合;
2.从集合中随机取两个数,通过加减乘除计算这两个数的结果,然后再将结果放回集合,这样集合就减少了一个元素;
3.重复2的步骤,直到集合中只剩下一个元素为止;
4.查看最后一个元素是否有是24来得出结果。
下面到了发送代码的时候!!!(对不起,没有注解)

#include<stdio.h>#include<stdlib.h>int a[5],l;void sou(int sum){    int m,n;    if(l==1)        return;    if(sum==1 && a[1]==24)    {        printf("YES");        l=1;        exit(0);    }    for(int i=1; i<sum; i++)        for(int j=i+1; j<=sum; j++)            for(int k=1; k<=6; k++)            {                m=a[i];                n=a[j];                switch(k)                {                    case 1:                        a[i]+=a[j];                        a[j]=a[sum];                        sou(sum-1);                        break;                    case 2:                        a[i]-=a[j];                        a[j]=a[sum];                        sou(sum-1);                        break;                    case 3:                        a[i]*=a[j];                        a[j]=a[sum];                        sou(sum-1);                        break;                    case 4:                        if(a[j] && a[i]%a[j]==0)                        {                            a[i]/=a[j];                            a[j]=a[sum];                            sou(sum-1);                        }                        break;                    case 5:                        a[j]-=a[i];                        a[i]=a[sum];                        sou(sum-1);                        break;                    case 6:                        if(a[i] && a[j]%a[i]==0)                        {                            a[j]/=a[i];                            a[i]=a[sum];                            sou(sum-1);                        }                        break;                }                a[i]=m;                a[j]=n;            }}int main(){    freopen("point24.in","r",stdin);    freopen("point24.out","w",stdout);    scanf("%d%d%d%d",&a[1],&a[2],&a[3],&a[4]);    sou(4);    printf("NO");    return 0;}

好了,今天下午还会将小木棍(stick)代码发送!

1 2
原创粉丝点击