hdoj-2028-Lowest common multiple plus
2016-03-19 13:59
316 查看
题目:Lowest common multiple plus
TLE
最大的问题是每次计算都要调用common函数,每次调用都要执行for循环,计算比较多的数导致TLE是正常的事情。
参考代码:
看到这串代码,不得不佩服作者的思考角度和方法:先找出输入所有数中的最大数max,然后不断+1进行判断(最小公倍数大于等于max),如果找到一个数对输入的所有数都能整除,那么这个数就是他们的最小公倍数。
代码:
#include<stdio.h> int common(int a,int b)//计算最大公约数 { int c=a%b,t=0; if(b>a) { t=b; b=a; a=t; } while(a%b!=0) { c=a%b; a=b; b=c; } return b; } int q[105]; int main() { int n,i,j,t=0; while(scanf("%d",&n)) { for(i=1;i<=n;i++) { scanf("%d",&q[i]); } t=q[1]; //printf("%d\n",common(4,6)); for(j=2;j<=n;j++) { t=q[j]*t/common(q[j],t);//重复计算其公倍数 } printf("%d\n",t); } return 0; }
TLE
最大的问题是每次计算都要调用common函数,每次调用都要执行for循环,计算比较多的数导致TLE是正常的事情。
参考代码:by acmcyc
#include <iostream> using namespace std; int main() { int n,i; int a[100]; while(cin>>n) { int max; cin>>a[0]; max=a[0]; for(i=1;i<n;i++) { cin>>a[i]; if(a[i]>max) max=a[i]; } int k=0,j; for(j=max;;j++)//2 5 7 j=7; { for(i=0;i<n;i++) { if(j%a[i]!=0) break; } if(i==n)// j%a[i]==0 break; } cout<<j<<endl; } return 0; }
看到这串代码,不得不佩服作者的思考角度和方法:先找出输入所有数中的最大数max,然后不断+1进行判断(最小公倍数大于等于max),如果找到一个数对输入的所有数都能整除,那么这个数就是他们的最小公倍数。
相关文章推荐
- hdoj上的一题和程序设计第二次作业的拓展-人见人爱a+b
- 程序设计第三次作业---C++计算器雏形
- 《C语言程序设计》指针篇<二>
- 《C语言程序设计》指针篇<一>
- 《算法竞赛入门经典》刘汝佳 C语言部分(前四章)“注解与习题” 之思索 <1>
- 程序设计第二次作业<2>
- 程序设计第二次作业<1>
- 第一次面向对象程序设计作业-大一下学期的自我目标
- A.S. -prompt tips -2b contnd.
- Backbone的使用方法
- JavaScript:面向对象
- was(websphere) spring logging problem
- 共享内存
- AMBA
- ul,li设置inline-block缝隙
- LSTM实现详解
- Cocos2dx游戏优化总结
- Andrew Ng机器学习笔记+Weka相关算法实现(三)神经网络和参数含义
- Java 静态代码块、代码块、构造函数、静态Field声明执行顺序
- 四则运算(3)