杭电 HDU ACM 2028 Lowest Common Multiple Plus

来源:互联网 发布:东方证券金典版软件 编辑:程序博客网 时间:2024/05/29 11:06

Lowest Common Multiple Plus

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 39183    Accepted Submission(s): 16144


Problem Description
求n个数的最小公倍数。
 

Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
 

Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
 

Sample Input
2 4 63 2 5 7
 

Sample Output
1270
 

Author
lcy
 
唉 这个题打心眼儿里没想到wa那么多次。
之前 程序错误属于运行  错误一开始用总的乘积 除以n个数的最大公约数。中间结果可能溢出。
再次程序错误属于逻辑错误,思路都错了。
最后判定 先求前两个数的最小公倍数。用这个最小公倍数和数组下一位再求最小公倍数,依次…………
不过!这是 第一种比较麻烦的方法。
第二种:找出n个数中 最大的数 M,然后次次检索n个数是否所有的都把它整除,否则 M++;在整个循环过程中
如果 所有的数不能同时把它整数,那么循环不会跳出,跳出时k即为所求。
F:
#include<iostream>#include<algorithm>using namespace std;int gcd(int k,int b){    if(!b)return  k;gcd(b,k%b);}int main(){int n;int *ls=new int [10000000];while(cin>>n){for(int i=0;i<n;i++){cin>>ls[i];}int G=ls[0],M=ls[0];for(int j=1;j<n;j++){G=gcd(ls[j],M);if(M<M*(ls[j]/G))M=M*(ls[j]/G);}    cout<<M<<endl;}return 0;}

S:
#include<iostream>#include<algorithm>using namespace std;int main(){int n;int ls[100000];while(cin>>n){for(int m=0;m<n;m++)cin>>ls[m];sort(ls,ls+n);       int k=ls[n-1];for(int i=0;i<n;i++){if(k%ls[i]!=0){k++;i=-1;}}cout<<k<<endl;}return 0;}

0 0
原创粉丝点击