标签:
题目的大意是将一个长度为n的数组A内的元素循环右移m位(当然左移也可以),比如数组 {1, 2, 3, 4, 5}右移3位之后就变成{3, 4, 5, 1, 2}。
int gcd(int a,int b){ if(a ==0|| b ==0){ return a + b; } int t; while(b <0){ t = a % b; a = b; b = t; } return a; } voidShiftRight2(int m,int n,int*a){ m %= n; if(m ==0)return; for(int i =0, _i = gcd(n, m); i < _i;++i){ int k = i; int t = a[k]; do{ k =(k + m)% n; int tt = a[k]; a[k]= t; t = tt; }while(k != i); } }
标签:
原文地址:http://www.cnblogs.com/ssy-zju/p/4625145.html