CCF題目:相反數
阿新 • • 發佈:2019-01-08
問題描述
有 N 個非零且各不相同的整數。請你編一個程式求出它們中有多少對相反數(a 和 -a 為一對相反數)。
輸入格式
第一行包含一個正整數 N。(1 ≤ N ≤ 500)。
第二行為 N 個用單個空格隔開的非零整數,每個數的絕對值不超過1000,保證這些整數各不相同。
輸出格式
只輸出一個整數,即這 N 個數中包含多少對相反數。
樣例輸入
5
1 2 3 -1 -2
樣例輸出
2
-----------------------------------------------------------------------------------------
解法1:(我的)
import java.util.Scanner; public class InvNum { public static void main(String[] args) { //main alt+/ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[] a=new int[n]; for(int i=0;i<n;i++){ a[i]=sc.nextInt(); } int result=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(a[i]+a[j]==0){ result+=1; break; } } } System.out.println(result); } }
未考慮輸入的數的範圍及N應取得的最大值。
解法2:參考別人的程式,用java編的
import java.util.Scanner; public class InvNum2{ public static void main(String[] args){ new InvNum2().run(); } public void run(){ Scanner sc=new Scanner(System.in); int n; n=sc.nextInt(); int[] count=new int[1001]; for(int i=0;i<n;i++){ ++count[sc.nextInt()+500]; //輸入資料範圍為-500~500,不太滿足要求 } int ans=0; for(int i=0;i<=500;i++){ //最多輸500個數 ans+=Math.min(count[500+i],count[500-i]);//中括號裡的數字表示數的大小(絕對值小於1000) } System.out.println(ans); } }
看了老半天才略微看懂,的確是妙。
路漫漫其修遠兮,吾將上下而求索。