截木棍(最大公约数)

该博客介绍了如何用C语言解决一个木棍截断问题,目标是将n条长度不等的木棍截成相同长度的小段,要求每段长度尽可能长且不允许浪费。通过辗转相除法(欧几里得算法)计算最大公约数,然后求出所有木棍长度总和与最大公约数的商,即为最长小段的长度。最后,输出最长小段的长度和总共截成的段数。博客提供了完整的代码实现,并说明了如何创建输入文件b.in并把输出写入到b.out中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值