以下为my solution至a problem on codechef 我在计算机上获得了正确的输出,但没有在codechef上获得正确的输出 我无法在代码中找到错误。
问题是将数组按其元素的GCD划分并打印出来。
我写了以下代码:
#include<stdio.h>
int main(void)
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int a[n],i,divisor,curr,r;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
divisor = a[0];
for(i=1;i<n;i++)
{
curr = a[i];
if(curr<divisor)
{
divisor = curr;
}
}
for(i=0;i<n;i++)
{
r = a[i]%divisor;
if(r != 0){
divisor = 1;
break;
}
}
for(i=0;i<n-1;i++)
{
printf("%d ",a[i]/divisor);
}
printf("%d\n",a[n-1]/divisor);
}
return 0;
}
t
是测试用例的数量。 n
是数组的长度。 a[n]
是数组。 divisor
是数组中所有元素的GCD。 curr
是当前测试的数字。 r
是余下的。 示例输入
3
2 4 4
3 2 3 4
4 3 15 9 6
示例输出
1 1
2 3 4
1 5 3 2
答案 0 :(得分:0)
你在正确的轨道上认为这是一项涉及CGD(最大公约数)的练习。
然而,你误解了如何计算GCD 它很少是数组中最小的元素。
例如:
15, 6, 9
最小的元素是6
并且不是另一个元素的公约数(并且在你的情况下会选择1
作为除数),但在这种情况下的gcd是{{1 }}
您可以先阅读一些有关计算一对元素的CGD的信息。还有一个example implementation。
然后尝试弄清楚如何计算数组中所有元素的GCD。
这些提示可以提供帮助