原始代碼主要問題
int arrayOdd[10][20] 陣列過小,測試資料 10000 導致越界。
- 輸入迴圈
for(i=1; i<=array[m]; i++) 邏輯錯誤:應遍歷輸入的數字值,而非用陣列值作上限。
- 輸出迴圈
j < array[i]/2 假設奇偶數量相等,實際不一定。
- 缺少最終換行,OJ 判題嚴格比對格式。
修正思路
- 動態分配或開足夠大陣列(如
int odd[10000])。
- 讀入
n 組測試資料,每組讀一個整數 x,將 1..x 中奇數存入 odd[],偶數存入 even[]。
- 輸出時分別遍歷
odd_cnt、even_cnt 實際計數,空格控制:最後一個數後無空格、每組換行。
參考代碼
#include <stdio.h>
#include <stdlib.h>
int main() {
int T; scanf("%d", &T);
while (T--) {
int x; scanf("%d", &x);
int *odd = malloc((x/2+2)*sizeof(int));
int *even = malloc((x/2+2)*sizeof(int));
int oc=0, ec=0;
for (int i=1; i<=x; i++) {
if (i&1) odd[oc++] = i;
else even[ec++] = i;
}
for (int i=0; i
測試資料驗證
輸入:
2
10
5
輸出:
1 3 5 7 9
2 4 6 8 10
1 3 5
2 4
核心提醒
- OJ 題目務必仔細閱讀輸出格式要求(空行、空格、換行)。
- 陣列大小依題目數據範圍估算,留餘量或用動態分配。
- 邏輯清晰分層:讀入 → 分離 → 輸出,避免混雜導致錯誤。