很难实现限制每行打印多少个整数
Difficulty implementing limit to how many integers print on each line C++
我看到过这个问题,但是我很难在自己的代码中实现一些解决方案。
正在处理的程序查找数组中的所有素数,并乘以查找所有素数所需的时间。其中一个规定是让程序每行只打印10个数字。我尝试了几种不同的方法来实现这一点,但没有一种方法可以打印我需要它们的方式。下面是当前代码:
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <stdio.h>
using namespace std;
static const int N = 1000;
int main()
{
int i, a[N];
clock_t start = clock();
for (i = 2; i < N; i++) a[i] = i;
for (i = 2; i < N; i++)
if (a[i])
for (int j = i; j*i < N; j++) a[i*j] = 0;
start = clock() - start;
for (i = 2; i < N; i++)
if (a[i]) cout << " " << i;
if ((i = 1) % 10 == 0)
cout << "n";
printf("nIt took %d clicks (%f seconds) to find all prime numbers.n", start, ((float)start) / CLOCKS_PER_SEC);
return 0;
}
我确信这是我自己的一个简单的错误,或者也许我没有正确的理解这是如何工作的。如果有人能就这个问题提供一些说明,我将不胜感激。
创建一个新的计数器,计算找到的质数的数量。
int primes = 0;
for (i = 2; i < N; i++) {
if (a[i]) {
primes++;
cout << " " << i;
if ( primes % 10 == 0)
cout << "n";
}
}
for (i = 2; i < N; i++)
if (a[i]) cout << " " << i;
if ((i = 1) % 10 == 0)
cout << "n";
这段代码所做的并不是你想要它做的。如果您的空格有任何指示,那么看起来您希望所有这些都嵌套在同一个for循环中。然而,它实际上是这样处理的:
for (i = 2; i < N; i++) if (a[i]) cout << " " << i;
if ((i = 1) % 10 == 0) cout << "n";
换句话说,两个完全独立的语句。第一个遍历a[i]
的每个元素并输出一个空格。当循环完成时,第二个语句检查一个条件并添加一个换行符(该检查也被打破,但我将在后面讨论)。
为了在每10个元素之后换行,需要对每个元素进行换行检查,或者至少对每个元素打印,而不是在末尾。
因此,正如所写的,你似乎期望的实际上是这样的:
for (i = 2; i < N; i++) {
if (a[i]) cout << " " << i;
if ((i = 1) % 10 == 0)
cout << "n";
}
大括号{ }
在这里很重要,因为它们确保所包含的所有语句都是for循环的一部分,并为每次迭代处理,而不仅仅是紧随其后的单个语句。
这就引出了第二个问题:换行符检查并没有按照您的想法执行。从您的解释来看,您想要的是每打印10个值触发一次检查,并添加一个换行符。然而,if ((i = 1) % 10 == 0)
…不这样做。。
而不是每10个值触发一次,所有if ((i = 1) % 10 == 0
所做的是将i
设置为1(这将真正打破你的for循环),然后永远不会触发,因为i = 1
无论如何总是返回1
。这只是一种让人费解的方式,让你做了你不想做的事。
正如Amadeus提到的,实现这一点的一种简单方法是使用一个计数器,每次打印一个值时都加1,并根据它进行测试:
for (i = 2; i < N; i++) {
if (a[i]) {
cout << " " << i;
primes++;
if (primes % 10 == 0)
cout << "n";
}
}
再次注意if (a[i])
子句的三个语句的大括号。这确保了递增和换行检查只在每次实际打印值时发生,而不是在for循环的每次迭代时发生。
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 复制列表初始化的隐式转换的等级是多少
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- while循环中while循环的时间复杂度是多少
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 我如何使它,无论用户用空白字符串按 Enter 多少次,它总是打印"开始"字符串?
- C++如何打印在2数组中重复多少个元素
- 很难实现限制每行打印多少个整数