读书人

100分说法!欢迎星级以上入满意立刻

发布时间: 2012-02-29 16:44:10 作者: rapoo

100分求一个说法!!!欢迎星级以上高手进入,在线等,满意立刻结帖
战士们做了一个靶子,靶子分五格,中心是39环,从左起顺时针是23、17、24 、16。
战士小李射了若干枪,每一次都击中靶子,并且正好是100环。问他打了几枪?每枪
多小环?
首先列出每个要素的的所有情况,从最里层开始向上,上一层每个元素分别与最里层的所有元素相匹配,形成前两个元素匹配的所有组合(最里面的两层循环),第三层的所有元素分别与前两层的所有组合相匹配,形成前三个元素匹配的所有组合
class bazi //上一层的各个数字分别与下一层的所有情况相匹配
{
public static void Main()
{
for (int n = 0; n <= 6; n++)16环个数的所有情况
{
for (int l = 0; l <= 6; l++)17环个数的所有情况
{
for (int k = 0; k <= 4; k++)23环个数的所有情况
{
for (int j = 0; j <= 4; j++)24环个数的所有情况
{
for (int i = 0; i < 3; i++) 39环个数的所有情况
{
if (n * 16 + l * 17 + k * 23 + j * 24 + i * 39 == 100)
{
Console.WriteLine( "{0},{1},{2},{3},{4} ", n, l, k, j, i);
}


}
}
}
}
}
Console.Read();
}
}
这道题是用穷举法求解,第一步列举出所有的情况,第二步用if筛选出所有符合条件的情况,但是有一点不明白,就是那个欠套四层的for循环是如何穷举出所有情况的,要说按执行来理解太复杂了,有没有简单的语言描述一下,或者能一步步的推出来他的执行过程请高手指点一下,还是那句话在线等,满意立刻结帖!

[解决办法]
把问题集合搞小一点,假设 n={0, 1}, l={0,1,2,3,4,5}

那么穷举就是:
n=0,然后l依次取0,1,2,3,4,5看看是否满足条件;
n=1,然后l依次取0,1,2,3,4,5看看是否满足条件;

程序结果就是:
for(n=0; n <=1; n++)
for(l=0; l <=5; l++)
if(...){...}
[解决办法]
同理,100 = n * 16 + l * 17 + k * 23 + j * 24 + i * 39
计算取值范围:
n=[0,6],l=[0,5], k=[0,4], j=[0,4], i=[0,2]

程序表达就是:
for (int n = 0; n <= 6; n++)16环个数的所有情况
{
for (int l = 0; l <= 5; l++)17环个数的所有情况
{
for (int k = 0; k <= 4; k++)23环个数的所有情况
{
for (int j = 0; j <= 4; j++)24环个数的所有情况
{
for (int i = 0; i <=2; i++) 39环个数的所有情况
...

通常for 语句使用 < 号:
for (int n = 0; n < 7; n++)16环个数的所有情况
{
for (int l = 0; l < 6; l++)17环个数的所有情况
{
for (int k = 0; k < 5; k++)23环个数的所有情况
{
for (int j = 0; j < 5; j++)24环个数的所有情况
{
for (int i = 0; i < 3; i++) 39环个数的所有情况
...
[解决办法]


楼主不必要去一定要理解这个题的执行过程

很多算法的题目你都不必要去理解执行过程

每个算法都有在简单情况下的应用,这个执行

过程你需要去理解,但对于同样的算发的复杂

应用,你可以不必要去推敲


比如上面这个题,你只要理解如果是两层for

的情况下的执行过程,比如只有39 和 24 环的

情况下,这个相信你很快就写出来,并理解执行过程


至于更高的层数,套用算法就可以了

要不如果有50种不同的环数,50个for

你怎么一步一步理解执行啊

读书人网 >C++

热点推荐