在CodeChef

时间:2016-07-20 07:11:33

标签: c arrays greatest-common-divisor

以下为my solutiona 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   

1 个答案:

答案 0 :(得分:0)

你在正确的轨道上认为这是一项涉及CGD(最大公约数)的练习。

然而,你误解了如何计算GCD 它很少是数组中最小的元素。

例如:

15, 6, 9

最小的元素是6并且不是另一个元素的公约数(并且在你的情况下会选择1作为除数),但在这种情况下的gcd是{{1 }}

您可以先阅读一些有关计算一对元素的CGD的信息。还有一个example implementation

然后尝试弄清楚如何计算数组中所有元素的GCD。

这些提示可以提供帮助