读书人

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

发布时间: 2013-03-14 10:33:15 作者: rapoo

给定三个数,问你使用加减乘除能否得到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;
}

读书人网 >C++

热点推荐