首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言奇偶數分離輸出格式錯誤:陣列越界、邏輯錯誤與格式控制修正

     編輯:程式設計疑難解答

原始代碼主要問題

  • int arrayOdd[10][20] 陣列過小,測試資料 10000 導致越界。
  • 輸入迴圈 for(i=1; i<=array[m]; i++) 邏輯錯誤:應遍歷輸入的數字值,而非用陣列值作上限。
  • 輸出迴圈 j < array[i]/2 假設奇偶數量相等,實際不一定。
  • 缺少最終換行,OJ 判題嚴格比對格式。

修正思路

  1. 動態分配或開足夠大陣列(如 int odd[10000])。
  2. 讀入 n 組測試資料,每組讀一個整數 x,將 1..x 中奇數存入 odd[],偶數存入 even[]。
  3. 輸出時分別遍歷 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 題目務必仔細閱讀輸出格式要求(空行、空格、換行)。
  • 陣列大小依題目數據範圍估算,留餘量或用動態分配。
  • 邏輯清晰分層:讀入 → 分離 → 輸出,避免混雜導致錯誤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved