截木棍(最大公約數)

有n(n<=100)條木棍,每條長度是不超過1 000 000的整數,現將他們截成長度相等的小段。要求:每根長度都不許浪費,且截成的小段要最長。

問題:求截後每段小木棍的最大長度?一共截成了多少段小木棍?

【輸入】

第一行,n,表示長木棍的條數。

以下n個用空格隔開的整數,表示長木棍的長度。

【輸出】

第一行,截取的小木棍的最大長度。

第二行,截成的小木棍一共有多少段。

【樣例輸入輸出】

b.in b.out
4
18 12 24 30
6
14
樣例說明:有4段長木棍,長度分別爲18,12,24,30。可以截成最大長度爲6的小段,共截成了14段。

代碼實現:

#include <stdio.h>
int knap(int i,int j) //輾轉相除法求最大公約數
{
int a,b,c;
if(i>j)
{a=i;b=j;}
else{a=j;b=i;}
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
return b;
}


int main(){
long int sum;
int s,a[110];
int i,k;
freopen("b.in","r",stdin);//讀取b.in中的數據
scanf("%d",&s);
for(i=1;i<=s;i++){
scanf("%d",&a[i]);
}
k=a[1];
sum=a[1];
for(i=2;i<=s;i++){
k=knap(k,a[i]);
sum=sum+a[i];
}
sum=sum/k;
freopen("b.out","w",stdout);//將輸出結果寫入到b.out中
printf("%d\n%d\n",k,sum);
return 0;
}


注意:需要在工程文件夾下建立b.in用於讀取輸入數據,代碼運行後輸出結果不再控制檯顯示,而是存儲到工程文件夾下的b.out文件中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章