【问题标题】:Cutting Recipes exercise on CodeChefCodeChef 上的切割食谱练习
【发布时间】:2016-07-20 07:11:33
【问题描述】:

以下是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   

【问题讨论】:

  • 创建一个单独的函数来计算 GCD 并使用它。为您的变量提供实际名称。通过这两个步骤,您的错误更容易被发现或解决。
  • 您被样本输入误导了,GCD 不仅仅是数组中的最小元素。一个更好的例子是这个包含四个元素的数组:{6,9,21,15}。预期输出为:{2,3,7,5}。
  • 请给你的问题一个更好的标题。 “这段代码有什么问题?”基本上描述了这个网站上的一切。有相同问题的其他用户将无法找到此问题。

标签: c arrays greatest-common-divisor


【解决方案1】:

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

但是您对如何计算 GCD 有误解。
它很少是数组的最小元素。

例如:

15, 6, 9

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

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

然后试着弄清楚如何计算一个数组所有元素的 GCD。

这些提示可能会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 2018-12-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2019-01-29
    相关资源
    最近更新 更多