#include <stdio.h> #include <stdlib.h> #include<iostream> #define maxsize 20 int arr[maxsize];
using namespace std;
void exchange_tool(int* arr, int len)
{ int i;
int temp;
for (i = 0; i<(len + 1) / 2; i++) { temp = *(arr + i); *(arr + i) = *(arr + len - i); *(arr + len - i) = temp;}
}
void rotate(int*arr, int n, int m)
{ m = m%n;
exchange_tool(arr, n);
exchange_tool(arr, m);
exchange_tool(arr + m, n - m);
}
int main()
{ int n, k, i;
while (1) {
cout << "数组长度?" << endl; cin >> n;
cout << "右循环几位?" << endl;
cin >> k;
cout << "输入数字:" << endl;
for (i = 0; i < n; i++) { cin >> *(&arr[i]); }
rotate(arr, n, k);
for (i = 0; i < n-1; i++) {cout << arr[i] << " "; }
cout << arr[i] << endl;
cout << endl;
}
return 0;
}
其中有2个地方要注意 1. for(i=0;i<(len+1)/2;i++),正好可以避开奇数和偶数的判断,大家自己琢磨一下。 2.k = k%6;k的次数有可能大于6,,6的整数倍的右移还是本身,于是就求余吧。 其实这道题目一个元素的附加存储空间都可以省去,因为交换两个值不需要附加空间,我们有^. 如下: void swap(char& a,char& b) { a = a^b; b = a^b; a = a^b; } 这里用到了引用。大家推导一下,因为a^a = 0和a^0 = a。如果用指针的话,如下: void swap(char* a,char* b) { *a = *a^*b; *b = *a^*b; *a = *a^*b; }转载于:https://www.cnblogs.com/luckyraye/p/6714179.html