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