Онлайн компилятор C

#include <stdio.h> int main() { const int n = 12; int arr[n]; int i, temp; for (i = 0; i < 12; i++) { scanf("%d", &arr[i]); } for (i = 0; i < 2; i++) { temp = arr[i]; arr[i] = arr[3 - i]; arr[3 - i] = temp; } for (i = 4; i < 6; i++) { temp = arr[i]; arr[i] = arr[11 - i]; arr[11 - i] = temp; } for (i = 8; i < 10; i++) { temp = arr[i]; arr[i] = arr[19 - i]; arr[19 - i] = temp; } for (i = 0; i < 12; i++) { printf("%d", arr[i]); if (i != 9) printf(" "); } printf("\n"); return 0; }
这段代码的功能是:读取12个整数存入数组,然后对数组中的三组元素进行对称交换,最后输出结果。具体来说,它交换了索引0-3、4-7、8-11这三段内的元素,但每段只交换前两个和后两个(即每段内两两对称交换)。

你的代码中有两个问题:

- 在第三个交换循环中,索引计算 `19 - i` 是错误的。当 `i` 从8到9时,`19 - i` 会得到11和10,但你需要的是与 `i` 对称的索引,应该基于该段的起始和结束位置来计算。

- 输出条件 `if (i != 9)` 会导致在索引9后面缺少空格,但其他位置正常。检查一下你希望输出的格式是什么,这个条件可能不符合你的预期。