求解一道C语言题。答案为什么这么写?

2024-11-02 06:27:39
推荐回答(2个)
回答(1):

就是把过程倒过来啊
第一堆减半,加到第三堆
第三堆减半,加给第二堆
第二堆减半,加给第一堆

回答(2):

第1堆是a[0],第2堆是a[1],第3堆是a[2]。
这里说明一下(i+1)%3。表示用(i+1)/3取余数。当i=2时,i+1=3,3/3余数为0,则(i+1)%3=0。
程序的思想是倒推。首先第一个for循环第一条语句执行,此时i=2。 a[(i+1)%3]表示a[0]。a[0]/=2就是把自己本身/2,这样第1堆火柴恢复到第3堆火柴给它火柴之前的状态。然后a[i]+=a[(i+1)%3];这样第3堆火柴刚刚分出去的火柴也加回来了。
然后循环第二遍,此时i=1。a[(i+1)%3]表示a[2]。分析思路相同……
最后数组a[]中存的火柴恢复了初始状态,循环输出一遍完事。