用C语言写的,逐个移动每一位的位置实现右移
1 #include<stdio.h> 2 3 void swap(int* n, int count,int num) { 4 int tmp = 0; 5 int i = 0; 6 int j = count - 2; 7 for (i = 0; i < num; i++) { //循环次数由右移位数决定 8 tmp = n[count - 1]; //储存最后一位,使最后一位前移 9 for (j = count - 2; j >= 0; j--) { 10 n[j + 1] = n[j]; 11 } 12 n[0] = tmp; 13 } 14 } 15 16 int main() { 17 int n[100]; 18 int i = 0; 19 int count = 0, num = 0; 20 scanf("%d %d",&count,&num); 21 for (i = 0; i < count; i++) { 22 scanf("%d",&n[i]); 23 } 24 num = num % count; //避免重复循环 25 26 swap(n, count, num); 27 28 printf("%d",n[0]); 29 for (i = 1; i < count; i++) { 30 printf(" %d",n[i]); 31 } 32 return 0; 33 }
还挺快的
还有一种方法,利用C++ algorithm完成,具体思路是这样的:
先将输入得到的数组倒序
由于需要将每个整数循环向右移M个位置,则将倒序后的数组从第M项分割开,
分别进行倒序,则可得到右移后的数组
利用algorithm里的reverse函数实现倒序
代码如下:
1 #include<iostream> 2 #include<algorithm> 3 #include<vector> 4 5 using namespace std; 6 7 int main() { 8 int n = 0, c = 0; 9 cin >> n >> c; 10 vector<int> arr(n); 11 for (int i = 0; i < n; ++i) { 12 cin >> arr[i]; 13 } 14 c = c % n; //避免重复循环 15 16 reverse(arr.begin(), arr.end()); //开始倒序 17 reverse(arr.begin(), arr.begin() + c); 18 reverse(arr.begin() + c, arr.end()); 19 20 cout << arr[0]; 21 for (int i = 1; i < arr.size(); i++) { 22 cout << " " << arr[i]; 23 } 24 return 0; 25 }
只能说,调库是个好东西
原文:https://www.cnblogs.com/SCP-514/p/13193679.html