C言語で配列の要素を右に循環シフトする方法を教えてください
配列の要素を右に循環させるには、以下の手順を実行できます。
- 最後の要素を格納するための一時的な変数tempを定義する;
- 配列の最後から2番目の要素から始めて、最初の要素まで1つずつ後ろに要素をずらします。
- 最初の要素にtempの値を代入して、循環右シフトを完了します。
以下にサンプルコードを示します。
#include <stdio.h>
void rotateRight(int arr[], int n) {
int temp = arr[n-1];
for (int i = n-1; i > 0; i--) {
arr[i] = arr[i-1];
}
arr[0] = temp;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
rotateRight(arr, n);
printf("\n循环右移后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
実行結果:
原始数组:1 2 3 4 5
循环右移后的数组:5 1 2 3 4
例に示したコードで、配列を右にローテートする関数を定義し、メイン関数内で配列を右にローテートしています。