我想在数组的每一行打印10个元素,因此输出看起来像这样:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
...etc
到目前为止,这是我的代码:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
srand(time(0));
int array[1000];
for (int i = 0; i < 1000; i++) array[i] = rand() % 1000;
sort(array, array + 1000);
for (int i = 0; i < 1000;){
i += 10;
for(int j = 0; j < i; j++){
cout << array[j] << " ";
}
cout << endl;
}
return 0;
}
但我无法让它发挥作用。出于某种原因,它一遍又一遍地重复所有数字。
答案 0 :(得分:9)
内部循环仅在参数列表中使用j
。它还需要考虑i
,以便它可以跳过它已经打印出来的数字
虽然有一种更简单的方法。而不是做嵌套循环,只需每10个元素打印一个新行。
for (int i = 0; i < 1000;) {
cout << array[i] << " ";
if ((i + 1) % 10 == 0) {
cout << endl;
}
}
答案 1 :(得分:4)
这是一个很好的紧凑答案:
const int N = 10;
for ( int i = 0; i < 1000; i++ )
{
cout << array[i] << ((i+1) % N ? " " : "\n");
}
答案 2 :(得分:3)
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
srand(time(0));
int array[1000];
for (int i = 0; i < 1000; i++) array[i] = rand() % 1000;
sort(array, array + 1000);
for (int i = 0; i < 1000;i += 10){
for(int j = 0; j < 10; j++){
cout << array[i+j] << " ";
}
cout << endl;
}
return 0;
}
以下是实时版:http://ideone.com/76ZVp8
我从原始代码中做出的更改是将内循环修复为循环 从
for(int j = 0; j < i; j++){
到
for(int j = 0; j < 10; j++){
此更改的原因是您不希望在外部循环的每次迭代中从0循环到i。这将为开始的外部循环的每次迭代创建增加的输出数量。
由于我进行了第一次更改以将j从0限制为9,然后下一次更改以修复从
打印输出数组索引的索引cout << array[j] << " ";
到
cout << array[i+j] << " ";
之后我创建了ideone代码并注意到仍然错误的输出。在以下代码中,数组的前10个成员被初始增量10跳过:
i += 10;
通过将此增量移动到外部for循环,10的增量将在内循环和换行符之后发生,这是我们想要的。因此外部for循环的新代码变为:
for (int i = 0; i < 1000;i += 10){
答案 3 :(得分:3)
尝试以下
const int N = 10;
for ( int i = 0; i < 1000; i++ )
{
std::cout << array[i] << " ";
if ( ( i + 1 ) % N == 0 ) std::cout << std::endl;
}
答案 4 :(得分:3)
要对代码进行最小的更改,请更改以下行:
for(int j = 0; j < i; j++){
为:
for(int j = i-10; j < i; j++){
它应该主要起作用。为了避免其他问题,您还需要更改:
for (int i = 0; i < 1000;){
i += 10;
到
for (int i = 10; i < 1000; i+=10) {
但是,那些使用i % 10
的其他答案往往是更好的一般方法。
答案 5 :(得分:2)
您的问题出在内循环中:
for(int j = 0; j < i; j++){
cout << array[j] << " ";
}
尝试再次阅读并查看它正在做什么,也许通过使用调试器逐步完成它,你应该能够弄清楚为什么它会一次又一次地打印相同的数字,以及为什么你的线路变得越来越长更长的时间。
答案 6 :(得分:1)
您可以添加:
...
如果((j%10)= 0)
//添加换行符
...
答案 7 :(得分:0)
添加换行符将是解决此问题的简单方法。 简单表示用于描述处理的显式行为。