gpt4 book ai didi

c++ - 练习有问题?

转载 作者:行者123 更新时间:2023-11-28 06:00:30 24 4
gpt4 key购买 nike

我正在对 Stroustrup 的书进行以下练习:

Create a program to find all the prime numbers between 1 and 100. There is a classic method for doing this, called the “Sieve of Eratosthenes.” If you don’t know that method, get on the web and look it up. Write your program using this method.

我已经理解了这个练习,但我对如何用 C++ 实现它有疑问。
这是到目前为止的代码:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){

vector<int> nonprimi;
vector<int> primi;

for(int i=0; i <=100; i++){
primi.push_back(i);
}

int numero = 2;

for(int i = 0; i < 100; i++){
numero += 2;
numero == nonprimi[i];
}

numero = 3;
for(int i = 0; i < 100; i++){
numero += 3;
numero == nonprimi[i];
}

numero = 5;
for(int i = 0; i < 100; i++){
numero += 5;
numero == nonprimi[i];
}

numero = 7;
for(int i = 0; i < 100; i++){
numero += 7;
numero == nonprimi[i];
}

for(int i = 0; i < nonprimi.size(); i++){
if(primi[i] != nonprimi[i])
cout << "\n" << primi[i] << "\n";
}

return 0;
}

您能否提供一些有助于我成功实现算法的建议?

注意:可能我应该再读一遍这一章。

最佳答案

primi vector 不同,它在第一个循环中被推回 101 次,它的大小为 101,nonprimi vector 永远不会被推回,所以它保持不变大小为零。然后,在下一个循环中,当您尝试对其元素进行索引时,将抛出“vector 下标超出范围”异常。

此外,像这样的表达式 numero == nonprimi[i]; 是比较语句,除非它们在 if 语句或 while 循环。

考虑这个替代方案:

第二个 for 循环中的长 if 语句的字面意思是,如果第一个数组中的数字(已经用 0 到 99 的所有整数填充)是2、3、5 或 7 或不能被 2、3、5 或 7 中的任何一个整除,然后将其添加到 primi vector 中。

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
vector<int> nonprimi;
vector<int> primi;
for (int i = 0; i < 100; i++)
{
nonprimi.push_back(i);
}
for (int i = 0; i < nonprimi.size(); i++) {
if (((nonprimi[i] == 2) || (nonprimi[i] == 3) ||
(nonprimi[i] == 5) || (nonprimi[i] == 7)) ||
(nonprimi[i] % 2 != 0) && (nonprimi[i] % 3 != 0) &&
(nonprimi[i] % 5 != 0) && (nonprimi[i] % 7 != 0)) {

primi.push_back(i);
}
}

for (int i = 0; i < primi.size(); i++) {
cout << primi[i] << " ";
}

// or in a more STL way
// copy(primi.begin(), primi.end(), ostream_iterator<int>(cout, " "));

// system("pause");
return 0;
}

关于c++ - 练习有问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33376844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com