c实现的求最小公倍数
来源:互联网 发布:pdf.js 放大缩小 编辑:程序博客网 时间:2024/05/01 22:01
弄了几天终于做出了。
csdn 编程挑战题目如下:
问题描述:
给你n组测试数据,每组测试数据有m(0<m<=100)个正整数,求出m个数的最小公倍数。
Input:
输入n,随后有n行,每行开头输入m,m之后有m个正整数,相邻数之间用空格隔开。
Output:
每行输出一个数(该数在int范围内,同时,数前面加个“Case 1: ”,表示第几个Case,如“Case 1: 6”),相邻两组结果之间有一个空行,输出完最后一个结果后,再加一个空行,具体形式见样例。
答题说明:
输入样例:
3
2 2 3
3 2 5 7
5 1 2 3 4 5
输出样例:
Case 1: 6
Case 2: 70
Case 3: 60
初级版本:把输入的数组值设置为定值。
#include<stdio.h>int gcd(int a ,int b)//求两个数的最大公约数 { int temp; if(a < b) { temp = a; a = b; b = temp; } while(1) { temp = a %b;//缓存余数 a = b ; //a 存放的是被除数,永远是待求的两个数中较大的。 if(temp == 0) { break; } b=temp;/*b存放的是上一轮的余数,作为下一轮的除数。如果这一轮余数为零,那么就不再求最大公约数。*/ } return b;} void main(){ int i,a,b,bb[2][2]= {{2,3},{4,3}}; //数组如果赋值,必须在初始化时才可以这样写。//否则,在下面时,bb[2][2]= {{2,3},{4,3}}会报错,因为此时bb[2][2]就指定一个值。//为了测试,初步把数组的值都定死了 int k,res,j; a = 2; b = 2; for(i = 0; i < a; i++) { res = bb[i][0]; printf("Case %d",i); printf(": "); /*k不能从0开始,因为一组数除了最后一个数未参加求最大公约数时,前面得出的最大公约数和这最后一个数开始执行下面的一句时, 会导致进入循环体时 bb[i][k+1]中的k+1,使得数不存在数组值而出错。 for( k =0; k < b ;k ++) res=(res * bb[i][k +1])/gcd(res,bb[i][k+1]); */ for( k = 1; k < b ;k ++) res=(res * bb[i][k])/gcd(res,bb[i][k]);//直接在主程序中求每一列的最大公倍数。 printf("%d\n",res); } }
中级版本:手动输入数组的行和列。其他仍一样,求出每一行数的最小公倍数仍在主函数中处理。代码如下:
void main(){ int i,a,b,bb[10][10],count[10]; int k,res,j,w; w=0; scanf("%d\n",&a); w++; for(i = 0; i < a; i++) { scanf("%d\n",&b); w++; count[i] = b; for(j = 0; j < b; j++) {scanf("%d\n",&bb[i][j]); w++; } } //Dev-c++编译器很奇怪,当输入所以的数字完按enter不能出结果,得重新再随便按一个键,再按enter才能出结果。//为了测试到底从键盘传入多少个数进去,故设了w这个计数器。 printf("You have already input %d",w); printf(" numbers\n"); for(i = 0; i < a; i++) { res = bb[i][0]; printf("Case %d",i); printf(": "); /*k不能从0开始,因为一组数除了最后一个数未参加求最大公约数时,前面得出的最大公约数和这最后一个数开始执行下面的一句时, 会导致进入循环体时 bb[i][k+1]中的k+1,使得数不存在数组值而出错。 for( k =0; k < b ;k ++) res=(res * bb[i][k +1])/gcd(res,bb[i][k+1]); */ for( k = 1; k < count[i] ;k++) res=(res * bb[i][k])/gcd(res,bb[i][k]);//在主函数中间处理求每一行的最小公倍数,因为方便得知数组的长度 。 printf("%d\n",res); } }
为了简化主函数,抽出一些方法,采取主函数调用的方式,简洁一些。
最终的版本如下:
#include<stdio.h>int gcd(int a ,int b)//求两个数的最大公约数 { int temp; if(a < b) { temp = a; a = b; b = temp; } while(1) { temp = a %b; a =b ; if(temp == 0) { break; } b = temp; } return b;}int lcm(int a,int b)//求两个数的最小公倍数 { int result =a *b /gcd(a,b); return result; }int rowlcm(int *b,int n) //求每一组数的最小公倍数 { int k,res; res = b[0]; for(k = 1 ;k < n;k++) { res= lcm(res,b[k]); } return res;}void main(){ int i,j,a,b,bb[10][10],count[10]; scanf("%d\n",&a);//输入行数。代表总共有几组数据参加运算。 for(i = 0; i < a; i++) { scanf("%d\n",&b);//输入列数。代表每一组中总共有几个数。 count[i] = b;//数组count保存当前的列数 for(j = 0; j < b; j++) scanf("%d\n",&bb[i][j]); } for(i = 0; i < a; i++) { printf("Case %d",i); printf(":%d\n", rowlcm(bb[i],count[i]));//c语言中处理形参为数组时,长度不好求,直接传数组长度过去 } }
0 0
- c实现的求最小公倍数
- 求最大公约数,最小公倍数(C语言实现)
- 求最大公约数,最小公倍数(C语言实现)
- 求最大公约数和最小公倍数的C代码
- 求最小公倍数(公式法)的实现
- javascript实现,求一组数的最小公倍数
- C 求最大公约数最小公倍数
- 问题 C: 求最小公倍数
- C语言求最小公倍数
- C语言求最小公倍数
- 求最大公约数、最小公倍数C语言实现代码www.iflyroom.com
- 求最小公倍数的方法
- 【C语言】求最大公约数/最小公倍数
- C编程:求最大公约数,最小公倍数。
- C语言编程求最小公倍数
- C语言求最大公约数最小公倍数
- C语言.求最大公约数最小公倍数
- c++: 求最大公约数 与 最小公倍数
- 容易犯的错误
- 一步一步完成cocos2dx 2.2 的Android交叉编译
- 在 Chrome 上下载 YouTube 影片
- Python 学习笔记(三):Strings
- 使用Cocos2d的从零基础开始你的游戏生涯(系列之一 基础简单Objective-C入门)
- c实现的求最小公倍数
- fragment、ListFragment使用ListView及自定义Listview等初始化操作
- 类型转换
- oracle 11g 错误之ORA-09925: Unable to create audit trail file解决办法之一!
- ListFragment 使用ListView and 自定义Adapter
- 九度题目1474 矩阵幂 北邮计算机机试2012
- 【Windows源码分析】(一)初始化内核与执行体子系统
- Spring filter和拦截器(Interceptor)的区别和执行顺序
- android常用工具类