在线编译器 C

#include <stdio.h> int main() { int arr[12]; for (int i = 0; i < 12; i++) { if (scanf("%d", &arr[i]) != 1) { return 0; } } for (int left = 0, right = 7; left < right; left++, right--) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; } for (int left = 8, right = 11; left < right; left++, right--) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; } for (int left = 0, right = 11; left < right; left++, right--) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; } for (int i = 0; i < 12; i++) { printf("%d", arr[i]); if (i < 11) { printf(" "); } } printf("\n"); return 0; }
这段代码读取12个整数,然后对数组进行了三次反转操作。第一次反转索引0到7的部分,第二次反转索引8到11的部分,第三次反转整个数组。最终输出结果。

- 注意第三次反转是整个数组反转,它会改变前两次反转的效果。你可以思考一下三次反转组合起来实际上等价于什么操作,比如是否相当于只交换了某些特定位置的元素。
- 检查一下反转区间的边界:第一次反转的右边界是7,但数组索引从0到11,索引7是第8个元素。确认这个区间是否是你想要的范围。