首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

给定三个数,问你应用加减乘除能否得到12

2013-03-14 
给定三个数,问你使用加减乘除能否得到12给定三个数,问你使用加减乘除能否得到12,要求三个数的顺序可以改变

给定三个数,问你使用加减乘除能否得到12
给定三个数,问你使用加减乘除能否得到12,要求三个数的顺序可以改变,计算的中间结果必须为整数。
有没有比较高明的方法?
[解决办法]
都是赵老师一派啊。。。
[解决办法]
还凑合了。。。。
[解决办法]
除了穷举,想不到更好的方法
[解决办法]
http://bbs.csdn.net/topics/380157851

遇到一个问题,有时头脑中冒出的第一个想法最终会被证明是最佳解决方案。
[解决办法]
尺有所短,寸有所长。
卑鄙是卑鄙者的通行证,高尚是高尚者的墓志铭。
[解决办法]
算法有问题把,39,3,3,应该是(39-3)/3,你大概算不出来把?
[解决办法]
递归穷举。


#include <stdio.h>

int isFound = 0;

void canBe12(int* a, int n, int deep, int tmp)
{
    if(isFound) 
        return;

    if(deep >= n)
    {   
        if(tmp == 12) 
            isFound = 1;

        return;
    }   

    for(int j = 0; j < n; j++)
    {   

        for(int i = 0; i < 4; i++)
        {   
            switch(i)
            {   
                case 0:
                    canBe12(a, n, deep + 1, tmp + a[j]);
                    break;

                case 1:
                    canBe12(a, n, deep + 1, tmp - a[j]);
                    break;

                case 2:
                    canBe12(a, n, deep + 1, tmp * a[j]);
                    break;

                default:
                    if(tmp % a[j] == 0)
                        canBe12(a, n, deep + 1, tmp / a[j]);


                    break;
            }   
        }   
    }   
}

int main()
{
    int a[3];
    for(int i = 0; i < 3; i++)
        scanf("%d", &a[i]);

    isFound = false;

    canBe12(a, 3, 0, 0); 

    if(isFound)
        printf("Can");
    else
        printf("Can't");

    return 0;
}

热点排行