区别在29行的输出,你是直接在本次循环中输出 a2[i] 了
当 27 行 在循环中给 a2[i] 赋值时,直接再输出是没有问题的,也就是: 给a2[0] 赋值输出a2[0], 给a2[1]赋值输出a2[1],给a2[2]赋值输出a2[2] .....
但是如果换成是 a2[k-1-i] ,就变成了 给a2[4] 赋值输出a2[0](此时为0因为还没有赋值,默认值是0),给a2[3]赋值输出a2[1](同样也是0), 给a2[2]赋值输出a2[2](刚刚赋值), 给a2[1]赋值输出a2[3](第二次循环赋值过的), 给a2[0]赋值输出a2[4](第一次循环赋值过的)
所以前面出现了两个0,因为你再输出的时候还没有给他赋值,他持有的是原来的值(没有赋值过的话就是默认值0)
解决也很简单, 把29行删掉,然后在31行下面重新循环输出
for(var i=0; i<k; i++) Console.Write("{0},",a2[i]);
当 27 行 在循环中给 a2[i] 赋值时,直接再输出是没有问题的,也就是: 给a2[0] 赋值输出a2[0], 给a2[1]赋值输出a2[1],给a2[2]赋值输出a2[2] .....
但是如果换成是 a2[k-1-i] ,就变成了 给a2[4] 赋值输出a2[0](此时为0因为还没有赋值,默认值是0),给a2[3]赋值输出a2[1](同样也是0), 给a2[2]赋值输出a2[2](刚刚赋值), 给a2[1]赋值输出a2[3](第二次循环赋值过的), 给a2[0]赋值输出a2[4](第一次循环赋值过的)
所以前面出现了两个0,因为你再输出的时候还没有给他赋值,他持有的是原来的值(没有赋值过的话就是默认值0)
解决也很简单, 把29行删掉,然后在31行下面重新循环输出
for(var i=0; i<k; i++) Console.Write("{0},",a2[i]);