zoukankan      html  css  js  c++  java
  • hdoj-2028-Lowest common multiple plus

    题目:Lowest common multiple plus

    代码:

    #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
    ",common(4,6));
    	    
    		for(j=2;j<=n;j++)
    	    {
    	    	t=q[j]*t/common(q[j],t);//重复计算其公倍数
    	    }
    	    
    	    printf("%d
    ",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),如果找到一个数对输入的所有数都能整除,那么这个数就是他们的最小公倍数。

  • 相关阅读:
    加法图灵机
    Experiment 1
    进制转换
    快速排序
    辗转相除、线段交点、多角形面积公式
    JS如何优雅监听容器高度变化
    解决react和其他框架之间的交互问题
    MacBook Pro触控板手势
    代理 请求登录失效(显示未登录)问题
    Web端 长按事件
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5239342.html
Copyright © 2011-2022 走看看