簡體   English   中英

對於我的C ++程序,輸出不正確

[英]Output not correct for my C++ program

所以,我有以下問題:

  1. 從文件tabl.in中讀取數字n (n <= 50)。
  2. 之后,將讀取具有nn列的正方形數組; 數組中的所有數字均由最多2位數字組成。
  3. 在文件tabl.out中顯示,如果總和是回文數(true = 1,false = 0),則在數組第二個對角線上找到的數字之和與10之間的模數,以及位於以下元素之間的算術平均值主對角線。

將為以下功能編寫函數:

  • 讀取數組
  • 次對角線求和的計算%10
  • 檢查先前的結果是否是回文
  • 主對角線以下的算術平均值的計算

例:

tabl.in

4
5 8 2 12
1 0 3 16
1 2 1 11
5 7 2 19

tabl.out

2 1 3

哪里
(12 + 3 + 2 + 5)%10 = 22%10 = 2
22是回文數= 1
1 + 2 + 2 + 1 + 7 + 5 = 18,18/6 = 3

到目前為止,我的代碼是:

#include <fstream>

using namespace std;

ifstream fin("tabl.in");
ofstream fout("tabl.out");

void readn(int Arr[][51], int n) {

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            fin >> Arr[i][j];

}

int sumsec(int Arr[][51], int n) {

    int s = 0;
    float r;
    for (int i = 1; i <= n; i++)
        s = s + Arr[i][n - i + 1];
    r = s % 10;
    return r;

}

void pald(int Arr[][51], int n) {

    int s = 0, pal = 0;
    for (int i = 1; i < n; i++)
        s = s + Arr[i][n - i + 1];
    while (s != 0) {
        pal = pal * 10 + s % 10;
        s = s / 10;
    }
    if (pal == s)
        fout << "1 ";
    else
        fout << "0 ";

}

int ambmd(int Arr[][51], int n) {

    int s = 0, k;
    float ame;
    for (int i = 2; i <= n; i++) {
        for (int j = 1; j <= i - 1; j++) {
            s = s + Arr[i][j];
            k++;
        }
    }
    ame = s / k;
    return ame;

}

int main() {

    int Arr[51][51], n;
    float r, ame;
    fin >> n;
    readn(Arr, n);
    r = sumsec(Arr, n);
    fout << r << " ";
    pald(Arr, n);
    ame = ambmd(Arr, n);
    fout << ame;

}

但是我對palindrome()函數有一個問題:對於示例中的給定數組,我的輸出文件將寫入2 0 3 ,而不是2 1 3 我究竟做錯了什么?

如果在計算pal之后, sumsecsumsec相同的方式計算s ,並且s仍包含總和,則您的pald函數將起作用。

在您的情況下, while (s != 0) {...}之后是if (pal == s) {...}可以重寫為if (pal == 0) ,顯然不是預期的解決方案。 只需在計算pal之前保存您的總和,然后與保存的總和進行比較即可。

同樣,將用於計算s循環條件更改為for (int i = 1; i <= n; i++)

int s = 0, pal = 0, sum = 0;
for (int i = 1; i <= n; i++)
    s = s + Arr[i][n - i + 1];
sum = s;
while (s != 0) {
    pal = pal * 10 + s % 10;
    s = s / 10;
}
if (pal == sum)
    fout << "1 ";
else
    fout << "0 ";

您還應該考慮各種注釋以改進代碼,例如不要在pald函數中重新計算總和。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM