我想创建一个程序,输出是:
Input : 7
1
23
456
7123
45671
234567
1234567
But the output i get is:
1
12
123
1234
12345
123456
1234567
我代码:#include<iostream>
using namespace std;
int main()
{
int i, j, k;
cin >> i;
for (j=0; j<=i; ++j){
for (k=1; k<=j; ++k){
cout << k;
}
cout << "n";
}
return 0;
}
我应该在这里修复什么使它像顶部的输出?谢谢你的帮助。
您需要进行一些更改。
for (j=0; j<=i; ++j)
从0
开始循环。这意味着在运行k<=j
之前,内循环的迭代永远不会发生,因为k
从1开始,这意味着你只打印一个空行。您需要在1
而不是0
处启动循环以修复此问题。
其次,您需要添加另一个变量来跟踪您在序列中的位置。好消息是,我们可以使用模块化数学来确保它为我们包装回1。这样做会得到像
这样的东西#include<iostream>
using namespace std;
int main()
{
int i, j, k, output = 1;
cin >> i;
for (j = 1; j <= i; ++j) {
for (k = 1; k <= j; ++k) {
cout << output;
if (output % i == 0) // wrap back to one once output == i
output = 1;
else
++output;
}
cout << "n";
}
return 0;
}
等于
1
23
456
7123
45671
234567
1234567
您不必打印j或k。
打印值不依赖于它们:
int main()
{
int max, j, k, count = 0; //Add a count value
std::cin >> max;
for (j = 0; j <= max; ++j) {
for (k = 1; k <= j; ++k) {
count %= max; //If count exceed the entered number
count++;
std::cout << count;
}
std::cout << "n";
}
while (1);
return 0;
}
在你的内循环变量k
总是从1
for (k=1; k<=j; ++k){
^^^
cout << k;
}
因此每个输出行也从1开始到j。
一个简单的方法如下所示。您声明了一个变量,该变量始终递增,而不依赖于循环的索引。
这是一个示范程序。
#include <iostream>
int main()
{
while ( true )
{
unsigned int n;
std::cout << "Enter a non-negative number (0 - exit): ";
if ( not ( std::cin >> n ) or ( n == 0 ) ) break;
std::cout << 'n';
for ( unsigned int i = 0, value = 0; i++ < n; )
{
for ( unsigned int j = 0; j < i; j++ )
{
std::cout << ++value ;
value %= n;
}
std::cout << 'n';
}
std::cout << std::endl;
}
return 0;
}
如果输入7,则其输出如下所示
Enter a non-negative number (0 - exit): 7
1
23
456
7123
45671
234567
1234567
Enter a non-negative number (0 - exit): 0
在这个程序中,引入了一个辅助变量value
,它总是递增的,然后像value %= n
那样求值
我认为这是最简单明了的方法。
如果程序不是在vc++中编译的(由于语言扩展的设置),那么你可以替换这个语句
if ( not ( std::cin >> n ) or ( n == 0 ) ) break;
if ( !( std::cin >> n ) || ( n == 0 ) ) break;