zoukankan      html  css  js  c++  java
  • 百度算法题回忆

    百度2020日常实习 - Java

    @2020.3.29晚上:

    (1)题目给出n,求所有(1<=a,b<=n)可能的a与b中:

    计算(最小公倍数 - 最大公约数)的最大值:

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            long n=sc.nextLong(); //这里的n用的是【long】,而不是int  //用int通过率30%
            long result=n*(n-1)-1;//【巧妙分析,不用一个个试】
            System.out.print(result);
        }
    }

    (2)给出n个数a[i],每次最大的减去n,其余+1,

    直到a[i]中最大的数小于n为止,统计“减n”操作的次数:k

        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n=sc.nextInt();
            long[] a=new long[n+1];//因为a[i]属于1~10^18,所以用long,而不是int
    
            for(int i=0;i<n;i++){
                a[i]=sc.nextLong();//nextLong()
            }
            long k=0;
            while(true){
                long max=0;
                int index=0;
                for(int i=0;i<n;++i){
                    if(max<a[i]){
                        max=a[i];
                        index=i;
                    }
                }
                if(max<n)break;
                long temp=(a[index]-n)/n; //注意temp的类型
                if(temp<1)temp=1;
                a[index]=a[index]-n*temp;//【一次减去temp次的n,不然时间复杂度爆表】 //在这个修改之前,一直显示系统超时————“循环错误或者复杂度过高”
                for(int i=0;i<n;++i){
                    if(i!=index)a[i]+=temp;//
                }
                k+=temp;
            }
            System.out.print(k);//【我们只需要次数k,不用完全模拟过程,要加速中间的步骤】
        }
    }

    笔试当天上午的:输入输出格式练习,起到了很大的作用&启发:https://www.cnblogs.com/qyf2199/p/12590097.html

  • 相关阅读:
    Azureus 3.0.0.8
    KchmViewer 3.0
    GNOME 2.18.0 正式版颁发宣布
    Emacs 22.0.95
    gTwitter:Twitter 的 Linux 客户端
    KDE DVD Authoring Wizard-易用的 DVD 制造器材
    GIMP 2.3.15
    Monit-零碎看监工具
    Cobras-专注于 Qt 的 IDE
    K3b 1.0 正式版公布
  • 原文地址:https://www.cnblogs.com/qyf2199/p/12597578.html
Copyright © 2011-2022 走看看