这是问题。 找到具有数组值的输入变量的最大GCD。
输入如下:- 第一行包含两个整数N和Q。
第二行包含N个构成arr []的整数。
接下来,Q行包含一个整数M,即她希望返回的秒数。
#include <stdio.h>
int main(){
int n,q;
scanf("%d %d", &n,&q);
int a[n];
int gcdn[n];
for (int i = 0;i < n; i++) {
scanf("%d",&a[i]); }
while (q>0){
q--;
int x;
scanf("%d",&x);
for(int i=0;i<n;i++) {
gcdn[i] = gcd(a[i],x);
}
printf("%d \n",max(gcdn,n));
}
}
int gcd (int a, int b) {
if (b==0)
return a;
else
return gcd(b, a%b);
}
int max(int *a,int n) {
int max= a[0];
for(int i = 1;i<n;i++) {
if(a[i]>min) {
max= a[i];
}
}
return max;
}
如何在竞争性编程方面使此代码更好?还有哪些其他语言可以使此代码更好,更有效?
答案 0 :(得分:-1)
最明显的性能改进是未对数组进行排序:您需要首先进行搜索(即O(\log(n))
),而不是简单地向数组中添加元素,而是需要进行搜索。获取数组的最大值,您只需要第一个(或最后一个)条目即可。