在线编译器 C

#include <stdio.h> enum { SIZE = 12 }; int main() { int A[SIZE]; for (int i = 0; i < SIZE; i++) { scanf("%d", &A[i]); } for (int i = 0; i < 2; i++) { int temp = A[i]; A[i] = A[3 - i]; A[3 - i] = temp; } for (int i = 5; i < 7; i++) { int temp = A[i]; A[i] = A[13 - i]; A[13 - i] = temp; } for (int i = 9; i < 11; i++) { int temp = A[i]; A[i] = A[21 - i]; A[21 - i] = temp; } for (int i = 0; i < SIZE; i++) { printf("%d ", A[i]); } return 0; }
这段代码的功能是:读入12个整数存入数组A,然后对数组中的三组元素进行对称交换,最后输出整个数组。

具体来说,代码将数组分成三个长度为4的块(索引0-3、4-7、8-11),在每个块内交换首尾对应的元素。例如第一个块交换A[0]与A[3]、A[1]与A[2];第二个块交换A[5]与A[8](因为13-5=8)、A[6]与A[7];第三个块交换A[9]与A[12](但A[12]超出数组范围)、A[10]与A[11]。

- 注意第三个循环中21-i的计算:当i=9时,21-9=12,但数组索引最大是11,这会导致访问越界。你需要检查这个索引范围是否正确。
- 第二个循环的交换范围是A[5]和A[6]与A[8]和A[7]交换,但A[8]属于第三个块,这可能导致意外的元素移动。思考一下你真正想要交换的是哪些位置。