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

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

2012-02-29 
100分求一个说法!!!欢迎星级以上高手进入,在线等,满意立刻结帖战士们做了一个靶子,靶子分五格,中心是39环,

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

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

热点排行