问题是打印出最小的质数但大于其他非质数。经过数小时的工作,无论我键入什么内容,我的代码都会打印出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;
}
答案 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;
}