如何获取最后一个数字来创建新行?

问题描述 投票:0回答:2

我正在为 C++ 课程建立一个实验室。我当前的代码为我提供了本实验室可用的大部分但不是全部的点。我似乎无法正确打印代码。我尝试了许多可能的打印代码的方法。在我最接近的尝试中,打印的输出似乎在最后一行的末尾缺少一个新行。如果有任何建议,我将不胜感激。

作业说明如下:

**冰雹序列 ** 给定一个正整数 n,以下规则将始终创建一个以 1 结尾的序列,称为冰雹序列:

如果 n 是偶数,则除以 2 如果 n 是奇数,则乘以 3 并加 1(即 3n +1) 继续直到 n 为 1 编写一个程序,读取一个整数作为输入,并打印以输入的整数。设置输出格式,以便每行打印 10 个整数,每个整数由制表符 ( ) 分隔。

输出格式可以实现如下:print(n, end=' ')

例如:如果输入是:

25

输出为:

25   76   38   19   58   29   88   44   22   11 
34   17   52   26   13   40   20   10   5    16 
8    4    2    1

我的下面的程序有效,但自动评分器只是希望我与他们所拥有的完全匹配,在最后一个数字处有一个新行。

#include <iostream>
using namespace std;

int main() {
    int n; 
    int counter = 1;
    cin >> n;
    cout << n << "\t";

    while ( n >1) {
        if ( n%2 == 0) {
            n = n /2;
            cout << n << "\t";
        }
        else {
            n = 3 * n + 1;
            cout << n << "\t";
        }
        counter++;
        if ( counter % 10 ==0) {
            cout << endl;
        }
    }
    return 0;
}

这是自动分级机告诉我需要修复什么:

我真的不明白,这怎么办?

好吧,我尝试添加

"\t"
新选项卡,但它给了我一个错误,即每 10 个数字不是一个新行,所以我将程序改回 endl:
cout << n << "\t";

所以我真的不明白为什么自动平地机这么挑剔。

c++ list formatting
2个回答
0
投票

在 while 循环之后,检查

counter
是否不能被 10 整除(因此循环尚未打印换行符),如果是,则打印换行符。

if (count % 10 != 0) {
    cout << endl;
}

0
投票

您可以在退货声明之前添加另一个

cout << endl;
。这是在
while (n > 1)
循环之外,因此将在退出之前添加最后一个换行符。不过,我怀疑自动分级机仍然会抱怨您的制表符,因为它将打印在您的
cout << n << "\t";
行中,从 n = 2 到 n = 1 步骤。

如果这不适用于自动评分器,您可以尝试稍微重构您的代码,并将算术和日志记录分开(同时将两者保留在循环中)。例如,由于序列始终以 1 结尾,您可以将所有日志记录替换为:

    if (n == 1) {
        cout << n << "\n";
    } else {
        cout << n << "\t";
    }

而不是在算术之后记录值,这样更干净一些,并且会在换行符上结束序列。

© www.soinside.com 2019 - 2024. All rights reserved.