提示用户键入从0到99的20个整数。从该数据显示素数

时间:2016-07-15 04:22:53

标签: c++

Prime数字部分代码不起作用,它说我无法比较指针和整数。我不知道该怎么做。

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
int input[20] , i;

for (int i = 0; i < 20 ; i++)
{
    cout << " Enter 20 interger numbers from 0 to 99 "<< endl;
    cin  >> input[i];
}

for (i=2; i<20 ; i++) // edited as per the comments below
{
    if(input==i) // there is error here saying cant compare like this
    {
        cout << input << endl ;
    }
}
return 0;
}

3 个答案:

答案 0 :(得分:1)

您查找素数的算法是错误的。试试这个吧。这是有效的解决方案。

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    int input[20] , i,prime,t;
    cout << " Enter 20 interger numbers from 0 to 99 "<< endl; //
    for (int i = 0; i < 20 ; i++)
    {
        cout << " Enter a number"<< endl; //
        cin  >> input[i];
    }

    cout << " prime numbers are: "<< endl; //
    prime=1;
    for (i=0; i<20 ; i++)
    {
        for(t=2;t<input[i];t++)
        {
            if(input[i]%t==0){
                prime=0;
                break;

            }
        }

        if(prime==1 && input[i]!=0){
            cout << input[i] << endl;

        }
        prime=1;
     }
    return 0;
}

答案 1 :(得分:0)

您的主要检查不正确。代码:

for (i=2; i<input ; i++)
{
    if(input==i)
    {
        cout << input << endl ;
    }
} 

不起任何作用。在input中引用i < input时,实际上是指一个指向数组第一个元素的指针。你真正需要做的是对这个数组的所有元素进行置换,并检查它们是否为素数。像下面显示的内容应该有效:

bool flag;
for (i=0; i<20 ; i++) //Go over all 20 elements in array
{
    flag = true;
    for(int j = 2;j < input[i];j++)
    {
        if(input[i] % j == 0)
        {
            flag=false;
            break;
        }
    }

    if(prime==true)
        cout << input[i] << endl;
} 

在这里,如果input[i]中的数字除以2到input[i]之间的任何数字,并给出余数0(由模数检查 - % - 运算符),则它不是素数。
我们最初认为它是素数并将flag设置为true。如果我们发现它可以被1或其自身以外的其他东西整除,我们将flag设置为false,并且break语句会从内部for循环中断开,因为不需要进一步检查。
这里,input[i]引用数组中i索引的元素,索引为0。

答案 2 :(得分:0)

感谢您的帮助。我在这里得到了完整的工作代码。只是一个简单的问题,我需要改变其他任何东西以使其更好。

#include <iostream>

using namespace std;

int main()
{
int i,t, max, min, x[20], even=0, odd=0, prime; 
cout << "Enter 20 integer numbers from 0 to 99: "<<endl;
for (i=1;i<=20;i++)
{
    cout << "Input " << i <<":";
    cin >> x[i];
}
min=x[0];
max=x[0];
for(int i=1;i<=20;i++)
{
    if(min>x[i])
    {
        min=x[i];
    }
    else if(max<x[i])
    {
        max = x[i];
    }

}
cout<<"Max is "<< max <<endl;
cout<<"Min is "<< min <<endl;

cout << "Prime numbers are: " << endl ; 
prime=1;
for (i=2; i<=20 ; i++)
{
    for(t=2;t<x[i];t++)
    {
        if(x[i]%t==0)
        {
            prime=0;
        }
    }

    if(prime==1)
    {
        cout << x[i] << endl;
    }
    prime=1;
}
return 0 ;   
}