截木棍(最大公约数)
2015-10-01 11:40
302 查看
有n(n<=100)条木棍,每条长度是不超过1 000 000的整数,现将他们截成长度相等的小段。要求:每根长度都不许浪费,且截成的小段要最长。
问题:求截后每段小木棍的最大长度?一共截成了多少段小木棍?
【输入】
第一行,n,表示长木棍的条数。
以下n个用空格隔开的整数,表示长木棍的长度。
【输出】
第一行,截取的小木棍的最大长度。
第二行,截成的小木棍一共有多少段。
【样例输入输出】
样例说明:有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文件中。
问题:求截后每段小木棍的最大长度?一共截成了多少段小木棍?
【输入】
第一行,n,表示长木棍的条数。
以下n个用空格隔开的整数,表示长木棍的长度。
【输出】
第一行,截取的小木棍的最大长度。
第二行,截成的小木棍一共有多少段。
【样例输入输出】
b.in | b.out |
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文件中。
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍
- C语言进制转换代码分享