CCF題目:相鄰數對
阿新 • • 發佈:2019-01-02
問題描述
給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。
輸入格式
輸入的第一行包含一個整數n,表示給定整數的個數。
第二行包含所給定的n個整數。
輸出格式
輸出一個整數,表示值正好相差1的數對的個數。
樣例輸入
6
10 2 6 3 7 8
樣例輸出
3
樣例說明
值正好相差1的數對包括(2, 3), (6, 7), (7, 8)。
評測用例規模與約定
1<=n<=1000,給定的整數為不超過10000的非負整數。
------------------------------------------------------------------------------------------
常規解法:
package CSP3; import java.util.Scanner; public class NearNum { public static void main(String[] args) { new NearNum().run();//NearNum(); } public void run() { Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int[] a=new int[1000]; int result=0; for(int i=0;i<N;i++){ a[i]=sc.nextInt(); } for(int i=0;i<N;i++){ for(int j=i+1;j<N;j++){ if(Math.abs(a[i]-a[j])==1){ result+=1; } } } System.out.println(result); } }
巧妙解法:
package CSP3; import java.util.*; public class NearNum2 { public static void main(String[] args) { new NearNum2().run();//NearNum(); } public void run() { Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int[] count=new int[10007]; int result=0; for(int i=0;i<N;i++){ count[sc.nextInt()]++; } for(int i=1;i<=9999;i++){ result+=Math.min(count[i+1], count[i]); } System.out.println(result); //System.out.println("++"+count[1]); } }
總結出一條規律,CCF賽題的第一題大多可以用解法二的那種思路解決。