#include <stdio.h>
int final[3];
int checkprime(int n,int loopcount)
{
int flag=0,m;
for(m=2; m<=loopcount; m++)
{
if(n%m==0 && n!=2)
{
flag=1;
return 0;
break;
}
else if(n==2)
{
flag=0;
break;
}
}
if(flag==0)
{
return 1;
}
}
int main()
{
int test_no,n,i,j,k,m,max=1,loopcount,product=1,max_available=0,count=0;
scanf(" %d",&test_no);
for(i=0; i<3; i++)
{
scanf(" %d",&n);
int array[n];
for(j=0; j<n; j++)
{
scanf(" %d",&array[n]);
loopcount=array[n]/2;
if(max<loopcount)
{
max=loopcount;
}
}
loopcount=max;
max=array[0];
for(j=0; j<n; j++)
{
int x=checkprime(array[j],loopcount);
if(x==1)
{
if(array[j]>=max)
{
max=array[j];
}
}
}
product=product*max;
max=1;
for(j=0; j<n; j++)
{
int x=checkprime(array[j],loopcount);
if(x==1)
{
if(array[j]>max && product!=array[j])
{
max=array[j];
max_available=1;
}
else if(array[j]>=max && product==array[j] && max_available==0)
{
max=product;
}
}
if(x==0)
{
count++;
}
}
if(count==n || count==n-1)
{
final[i]=-1;
}
else
{
product=product*max;
final[i]=product;
}
product=1;
}
for(i=0; i<3; i++)
{
printf("%d\n",final[i]);
}
return 0;
}
上面的代码工作不正常,我无法得到这背后的原因,我找到素数两次,我使用了一个变量loopcount,以便找到检查数字是否为素数的迭代次数或不。
我最初采用了3号阵列,我提供了3个输入,每个输入的阵列大小不同,然后我迭代两次以找到最大值的产品,如果我找不到任何素数,我输出输出屏幕上的-1。 第一行描述了可以被视为测试用例数量的输入总数,对于每个测试用例,第一行描述了数组的大小,第二行描述了数组中存在的元素。请帮我识别问题,对于第一个输入它是打印-1但有一些问题,理想情况下,它应该只去部分
if(count==n || count==n-1)
{
final[i]=-1;
}
但它会编写其他部分的代码片段,
else
{
product=product*max;
final[i]=product;
}
我通过在else部分编写printf语句来检查,所以我能够获得为第一个输入打印的值,这是非常令人困惑的,因为如果部分正在执行那么为什么else部分被执行?并且对于其余的输入,它是打印垃圾值。
这是一个输入集:
3
5
1 4 6 8 10
3
2 2 9
2
156 13
相应的输出是:
-1
4
169
答案 0 :(得分:2)
您应该扫描array[j]
而不是array[n]
。 nth
索引无效。
int array[n];
for(j=0; j<n; j++)
{
scanf(" %d",&array[n]); /// Problem is here
loopcount=array[n]/2;
if(max<loopcount)
{
max=loopcount;
}
}
答案 1 :(得分:1)
以前,你有一个非常复杂的想法。以下是对代码进行的一些优化。随意问什么。希望它有所帮助:)
#include <stdio.h>
#include <math.h>
int checkprime(int n)
{
int flag=0,m;
for(m=2; m<=sqrt(n); m++)
{
if(n%m==0)return 0;
}
return 1;
}
int main()
{
int test_no,n,i,j,k,m,max=1,loopcount,product=1,max_available=0,count=0;
scanf("%d",&test_no);
for(i=0; i<test_no; i++)
{
scanf(" %d",&n);
int array[n];
for(j=0; j<n; j++)
{
scanf("%d",&array[j]);
}
sort(array); // Use any sort algorithm you wish to sort the array
int _1=1, _2=1;
for(int j=n-1; j>=0; j--){
if(checkprime(array[j])==1){
if(_1==1){
_1=array[j];
}
else if(_1!=1 && _2==1){
_2=array[j];
break;
}
}
}
if(_1==1 && _2==1)printf("-1\n");
else if(_2==1 && _1!=1)printf("%d\n", _1*_1);
else printf("%d\n", _1*_2);
}
return 0;
}