昏,打10枪每次也只有中和不中2种情况,不需要循环11次啊
你这样11个循环嵌套,循环11^11次方,你算算要运行多久,大概2500亿次,就算忽略各层的比较所用时间,只计算n++这一句的时间,如果用1个3.0Ghz的cpu,相当于每秒有30亿个时钟周期,就算n++的执行只用一个时钟周期=1/30亿秒,执行完全部循环也要2500/30≈83秒,实际算上各层循环的累加和比较所用的时间,绝对不会在2分钟之内运行完。
楼上Silverbullet说错了,每靶0-10环,所以不能简单地分成中和不中两种情况。
不过楼主这个代码也有问题。
第一,每靶0-10环,所以每个循环的判断条件应该是小于11才对。如果是小于12,就变成是每靶0-11环了。
第二,共打了10枪,但却用了11重循环,应该是10重循环才对。
简单地使用多重循环来写这个代码效率很低,因为有10重循环,每重循环有要运行11遍,也就是11的10次方。如果要进行优化,那么就要在每重循环加上一些判断条件过滤掉不必要的循环,但这样整个代码就会很臃肿,所以这个问题确实很适合用递归来解决。
下面是我写的递归的代码,只需要几十毫秒就可以得出答案。
#include
{
int i, n, r = 0;
if(c == 0)
return 1;
if(t == 1)
return c < 11 ? 1 : 0;
if(10 * t < c)
return 0;
--t;
n = c < 10 ? c : 10;
for(i = 0; i <= n; ++i)
r += count(t, c - i);
return r;
}int main()
{
cout << count(10, 90) << endl;
system("pause");
return 0;
}