分析:将a[0]存储在一个临时变量中,然后将a[i]替换a[0]a[2i]替换a[i]….当一个循环结束的时候,若替换次数小于n,则从a[1]开始替换…,需要经过gcd(ni)(n和i的最大公约数)次循环后,才能把每一个元素都移到该移的地方。

cout<<"str1= "<<str1<<endl;

我们将问题看成把数组ab转换成ba,同时假定我们拥有一个函数可以将数组中的特定部分元素求逆。从ab开始,先对a求逆,得到ar b然后对b求逆,得到ar br ,然后整体求逆,得到(ar br)r 。此时就是ba。