日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

有趣的数字

發(fā)布時(shí)間:2023/12/31 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 有趣的数字 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

到了小Q喪心病狂的衛(wèi)生間思考時(shí)間:

題目:小Q今天在上廁所時(shí)想到了這個(gè)問題:有n個(gè)數(shù),兩兩組成二元組,相差最小的有多少對(duì)呢?相差最大呢?

輸入描述:

輸入包含多組測(cè)試數(shù)據(jù)。
對(duì)于每組測(cè)試數(shù)據(jù):
N - 本組測(cè)試數(shù)據(jù)有n個(gè)數(shù)
a1,a2...an - 需要計(jì)算的數(shù)據(jù)
保證:
1<=N<=100000,0<=ai<=INT_MAX.

輸出描述:

對(duì)于每組數(shù)據(jù),輸出兩個(gè)數(shù),第一個(gè)數(shù)表示差最小的對(duì)數(shù),第二個(gè)數(shù)表示差最大的對(duì)數(shù)。

示例1

輸入

6
45 12 45 32 5 6

輸出

1 2
思路:1.首先進(jìn)行數(shù)字排序,若最大值等于最小值,則最大對(duì)數(shù)=最小對(duì)數(shù)=n*(n-1)/2
2.用map統(tǒng)計(jì)數(shù)組中每種數(shù)字的個(gè)數(shù)
3.計(jì)算差最小的個(gè)數(shù)
如果數(shù)組中沒有重復(fù)數(shù)字,說明最小差不為0,最小差肯定是數(shù)組中相鄰兩個(gè)數(shù)的差,因此遍歷數(shù)組,統(tǒng)計(jì)最小差。
如果數(shù)組中有重復(fù)數(shù)字,說明最小差為0,最小差肯定是數(shù)組中相鄰兩個(gè)數(shù)的差,因此,遍歷一遍數(shù)組,并統(tǒng)計(jì)最小差。
4.計(jì)算差最大的個(gè)數(shù)
只有一種情況,即最大值和最小值的兩兩組合,故為最大值個(gè)數(shù)*最小值個(gè)數(shù)
目前搜集到的一個(gè)代碼:
 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.List;
 4 import java.util.Map;
 5 import java.util.Scanner;
 6 import java.util.TreeMap;
 7  
 8 public class Main {
 9  
10     public static void main(String[] args) {
11         Scanner sc = new Scanner(System.in);
12         while(sc.hasNext()){
13             int n = sc.nextInt();
14             int[] a = new int[n];
15             for(int i=0;i<n;i++){
16                 a[i] = sc.nextInt();
17             }
18              
19             Arrays.sort(a);
20             //如果數(shù)組中的值全相同,直接兩兩組合
21             if(a[0] == a[n-1]){
22                 int tmp = (n*(n-1))/2;
23                 System.out.println(tmp + " " + tmp);
24                 continue;
25             }
26             //map用來統(tǒng)計(jì)
27             Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
28             for(int i=0;i<n;i++){
29                 if(map.containsKey(a[i]))
30                     map.put(a[i], map.get(a[i])+1);
31                 else
32                     map.put(a[i], 1);
33             }
34             //求差最小個(gè)數(shù)
35             int minres = 0;
36             if(map.size() == n){
37                 int min = Math.abs(a[1]-a[0]);
38                 for(int i=1;i<n;i++){
39                     int tmp = Math.abs(a[i]-a[i-1]);
40                     if(tmp == min)
41                         minres++;
42                     else if(tmp < min){
43                         min = tmp;
44                         minres = 1;
45                     }
46                 }
47             }else{
48                 for(Integer key : map.keySet()){
49                     int val = map.get(key);
50                     if(val > 1){
51                         minres += (val * (val-1))/2;
52                     }
53                 }
54             }
55             //求差最大個(gè)數(shù)
56             int maxres = 0;
57             List<Integer> keyset = new ArrayList<Integer>(map.keySet());
58             int val1 = map.get(keyset.get(0));
59             int val2 = map.get(keyset.get(keyset.size()-1));
60             maxres = val1 * val2;
61             System.out.println(minres + " " + maxres);         
62         }
63     }
64  
65 }

總結(jié)

以上是生活随笔為你收集整理的有趣的数字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。