zoukankan      html  css  js  c++  java
  • 有趣的数字

    小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?

    输入描述:

    输入包含多组测试数据。
    对于每组测试数据:
    N - 本组测试数据有n个数
    a1,a2...an - 需要计算的数据
    保证:
    1<=N<=100000,0<=ai<=INT_MAX.



    输出描述:

    对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。

    输入例子:
    6
    45 12 45 32 5 6
    
    输出例子:
    1 2
    思路:针对这个题要分数字有没有重复的情况,如在计算最小数组对时,6 6 6有三种数组对,而不是两种。(n*(n+1)/2)
    在计算最大数组对时,2 2 3 4 4,有四种。n(min)*n(max)
    import java.util.*;
    public class Main{
        public static void main(String[] args){
            Scanner scan = new Scanner(System.in);
            while(scan.hasNext()){
                int n = scan.nextInt();
                int[] array = new int[n];
                for(int i=0;i<n;i++){
                    array[i] = scan.nextInt();
                }
                Arrays.sort(array);
                 int min = array[1]-array[0];
                    int max = array[n-1] -array[0];
                    int m=0;
                    int c = 1;
                    for(int i=1;i<n-1;i++){
                        int r = array[i+1]-array[i];
                        if(r<min){
                            min = r;
                            c=1;
                        }else if(r==min){
                            c++;
                        }
                    }
                    int count = 0;
                    if(min == 0){
                        for(int i=0;i<n-1;i++){
                            if(array[i+1]-array[i]==0){
                                count ++;
                            }else{
                                m += count*(count+1)/2;
                                count = 0;
                            }
                        }
                        if(array[n-2] ==array[n-1]){
                            m += count*(count+1)/2;
                        }
                        
                    }else{
                        m=c;
                    }
                    int minNum = 0;
                    int maxNum = 0;
                    for(int i=0;i<n;i++){
                        if(array[i]==array[0]){
                            minNum++;
                        }else if(array[i]==array[n-1]){
                            maxNum++;
                        }
                        
                    }
                    int q = minNum*maxNum;
                    System.out.println(m+" "+q);
            }
        }
    }
  • 相关阅读:
    java基础测试
    java随笔
    Android 开机广播的使用
    ZOJ 3715 Kindergarten Election
    LightOJ 1051
    LightOJ 1042
    LightOJ 1049
    LightOJ 1048
    LeightOJ 1046
    LightOJ 1045
  • 原文地址:https://www.cnblogs.com/yingpu/p/5819420.html
Copyright © 2011-2022 走看看