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);
            }
        }
    }
  • 相关阅读:
    织梦开发——相关阅读likeart应用
    织梦标签教程
    织梦专题调用代码
    HIT 2543 Stone IV
    POJ 3680 Intervals
    HIT 2739 The Chinese Postman Problem
    POJ 1273 Drainage Ditches
    POJ 2455 Secret Milking Machine
    SPOJ 371 Boxes
    HIT 2715 Matrix3
  • 原文地址:https://www.cnblogs.com/yingpu/p/5819420.html
Copyright © 2011-2022 走看看