我正在为 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";
所以我真的不明白为什么自动平地机这么挑剔。
在 while 循环之后,检查
counter
是否不能被 10 整除(因此循环尚未打印换行符),如果是,则打印换行符。
if (count % 10 != 0) {
cout << endl;
}
您可以在退货声明之前添加另一个
cout << endl;
。这是在 while (n > 1)
循环之外,因此将在退出之前添加最后一个换行符。不过,我怀疑自动分级机仍然会抱怨您的制表符,因为它将打印在您的 cout << n << "\t";
行中,从 n = 2 到 n = 1 步骤。
如果这不适用于自动评分器,您可以尝试稍微重构您的代码,并将算术和日志记录分开(同时将两者保留在循环中)。例如,由于序列始终以 1 结尾,您可以将所有日志记录替换为:
if (n == 1) {
cout << n << "\n";
} else {
cout << n << "\t";
}
而不是在算术之后记录值,这样更干净一些,并且会在换行符上结束序列。