我的代码的结果为零,我不知道为什么

时间:2019-02-26 05:43:33

标签: c++

问题是打印出最小的质数但大于其他非质数。经过数小时的工作,无论我键入什么内容,我的代码都会打印出0。我在哪里出错了?

(我昨天发布了这篇文章,但是由于我缺乏沟通能力,似乎没人能解决这个问题,我已经更加努力,希望今天会有所不同。)

例如:4 7 8 11则结果为11,因为11是最小的质数,然后大于最大的非质数(即8)。这是我的代码:

#include <iostream>
#include <cmath>
#include <complex>
using namespace std;

void TypeIn(int a[] ,int &n)
    {
            cout<< "\nType in n: ";
            cin >> n;
            for(int i=0; i<n; i++)
                {
                cout << "a[" << i << "]= ";
                cin >> a[i];
                }
    }
int CheckPrimeNum(int Number)
{
    int Count=0;
    int Divisor =1;
    while (Number >= Divisor)
    {
        if(Number % Divisor == 0)
        {
            Count++;
        }
    Divisor++;
    }
    return Count;
}
int BiggestNotPrime(int a[], int n)
{
    int BiggestNotPrime =0;
    for( int i=0; i<n; i++)
    {
        if( CheckPrimeNum(a[i]) !=2)
        {
        BiggestNotPrime = a[i];
        break;
        }
    }
    if(BiggestNotPrime ==0)
    {
        return 0;
    }
    else
    {
    for( int i=0; i<n; i++)
    {
        if(CheckPrimeNum(a[i])!=2 && a[i] > BiggestNotPrime)
        BiggestNotPrime =a[i];
    }
    return BiggestNotPrime;
    }
}
int main()
{
    int n;
    int a[100];
    TypeIn(a,n);
    int SmallestPrimeLocation =0;
    for(int i=0; i<n; i++)
    {
        if(CheckPrimeNum(a[i])==2 && a[i]> BiggestNotPrime(a,n))
            SmallestPrimeLocation =i;
            break;
    }
    if(SmallestPrimeLocation ==0)
    {
        cout << 0;
    }
    else
    {
        for(int i=SmallestPrimeLocation; i<n; i++)
        {
            if(a[i]>BiggestNotPrime(a,n) && a[i] < a[SmallestPrimeLocation] && CheckPrimeNum(a[i])==2)
            {
                SmallestPrimeLocation=i;
            }
        }
        cout << a[SmallestPrimeLocation];
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

我发现2个错误-您的答案总是为0,因为数组[4,7,8,9] 9是最大的最大非质数,并且您的数组中没有大于9的质数。 如果输入数组为[4,7,8,9,11],则输出为11,因为11的最小质数大于9。

第二个错误,而不是使用此错误

logout() {
    this.chk.logout().subscribe(
      (res) => {
        if (res.status == 200) {
          console.log(res);
        })
      }
    }, (err) => {
      alert("There was a problem logging you out");
    });
}

您应该使用

if(CheckPrimeNum(a[i])==2 && a[i]> BiggestNotPrime(a,n))
            SmallestPrimeLocation =i;
            break;

这是因为如果条件和循环仅执行一次,则您的break语句将被撤出。

无论您如何完成一个简单的任务,一个更简单的代码都可能是这样的 工作代码-

 if(CheckPrimeNum(a[i])==2 && a[i]> BiggestNotPrime(a,n))
 {       SmallestPrimeLocation =i;
         break;
 }