zoukankan      html  css  js  c++  java
  • HDU 2028 如何计算最小公倍数?

    题目 http://acm.hdu.edu.cn/showproblem.php?pid=2028

    方法一:先用辗转相除法,两个两个一组求出最大公约数,再求最小公倍数。。。

    View Code

    方法二:参见Matrix67的博客,http://www.matrix67.com/blog/archives/554

                趣题:不用除法,如何求n个数的最小公倍数

    我的代码

    View Code
    #include<stdio.h>
    #include<string.h>
    int judge(int *a,int n)
    {
        int i,j,flag=0;
        for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++)
        {
           if(a[i]!=a[j])
           {flag=1;
            break;
           }
        }
        if(flag==1)
        return 0;
        else
        return 1;
    
    
    
    }
    void fun(int *a,int *b,int n)
    {
        int min=10000000,i,mini;
        for(i=1;i<=n;i++)
        {
            if(a[i]<min)
           {min=a[i];
            mini=i;
           }
        }
        a[mini]=a[mini]+b[mini];
    }
    int a[1000],b[1000];
    int main()
    {
        int n,i,flag1;
    
        while(scanf("%d",&n)!=EOF)
        {
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
    
            flag1=1;
            for(i=1;i<=n;i++)
            scanf("%d",&a[i]);
            for(i=1;i<=n;i++)
            b[i]=a[i];
            while(flag1)
            {
            if(judge(a,n))
            {printf("%d\n",a[1]);
             flag1=0;
            }
            else
            fun(a,b,n);
            }
    
    
    
        }
        return 0;
    }

    但是过不了OJ,这个复杂度有点高,数稍微多一点点就不行了,暂时不知道怎么修改,存在这里吧。

    方法三:暴力求解

    View Code
    #include<stdio.h>
    int main()
    {
        int a[1000],T,i,j,k;
        while((scanf("%d",&T))!=EOF)
        {
            for(i=0;i<T;i++)
            {
                scanf("%d",&a[i]);
            }
            for(i=a[0];;)
            {
                for(j=0;j<T;)
                {
                    if(i%a[j]==0)
                    {
                        j++;
                    }
                    else
                    {
                        i++;
                        j=0;
                    }
                }
                printf("%d\n",i);
                break;
            }
        }
        return 0;
    }

    这个与方法二在思路上有点类似。

  • 相关阅读:
    前端工程师基础课程作业
    对于API接口设计的几点看法
    socket socket.io
    移动端布局
    angularJS
    bootstrop的应用
    jquery基础
    html5本地存储
    ajax
    数据库类型
  • 原文地址:https://www.cnblogs.com/whatthefy/p/2996362.html
Copyright © 2011-2022 走看看