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

C++ 九九乘法表區間輸出:多測試用例處理與格式對齊

     編輯:程式設計疑難解答

題目要求

  • 輸入:測試組數 T (0<T<100),每組兩整數 a,b (0<a≤b<10)。
  • 輸出:每組輸出第 a 行到第 b 行乘法表,組間空行,最後一組無空行。格式對齊。
  • 異常:a,b 不符合條件輸出 Input Error!。

標準解法代碼

#include <iostream>
#include <iomanip> // 用於格式對齊
using namespace std;

int main() {
    int T;
    cin >> T;
    
    // 存儲所有測試用例
    int* cases = new int[T * 2];
    for (int i = 0; i < T; ++i) {
        cin >> cases[i * 2] >> cases[i * 2 + 1];
    }

    for (int i = 0; i < T; ++i) {
        int a = cases[i * 2];
        int b = cases[i * 2 + 1];

        // 參數校驗
        if (a > b || a <= 0 || b >= 10) {
            cout << "Input Error!";
        } else {
            // 輸出第 a 到 b 行
            for (int row = a; row <= b; ++row) {
                for (int col = 1; col <= row; ++col) {
                    // 格式:寬度 6 左對齊,確保對齊
                    cout << row << "*" << col << "=" << row * col;
                    if (col < row) cout << "\t"; // 或使用 setw
                }
                cout << endl;
            }
        }

        // 組間空行(最後一組不輸出)
        if (i != T - 1) cout << endl;
    }

    delete[] cases;
    return 0;
}

關鍵點解析

技術點實現細節
動態數組存儲用例new int[T*2] 避免固定大小限制,用完 delete[] 釋放
參數邊界檢查a > b || a <= 0 || b >= 10 完全覆蓋題目條件
乘法表行列邏輯外層循環行 row,內層循環列 col <= row,符合下三角特性
格式對齊使用 \t 或 <iomanip> setw(6) << left 保證列對齊
組間空行控制if (i != T-1) cout << endl; 最後一組不加空行

輸出格式示例

輸入:

2
2
4
5
0

輸出:

2*1=2	2*2=4

3*1=3	3*2=6	3*3=9
4*1=4	4*2=8	4*3=12	4*4=16

5*1=5	5*2=10	5*3=15	5*4=20	5*5=25

常見錯誤避坑

  • 忘記組間空行:導致格式錯誤。
  • 最後一組多輸出空行:題目明確要求無尾隨空行。
  • 未處理輸入結束標記 0:雖然題目用 T 控制,但樣例含 0,代碼以 T 為準即可。
  • 對齊使用空格而非製表符:乘積位數不一致導致錯位,\t 或 setw 更可靠。

優化建議

  • 使用 vector> 替代動態數組,更現代安全。
  • 預計算最大乘積位數,動態設置 setw 寬度。
  • 提取 printMultiplicationTable(a, b) 函數,主邏輯更清晰。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved