1. 程式人生 > >CCF題目:相反數

CCF題目:相反數

問題描述

  有 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);
	}
}

看了老半天才略微看懂,的確是妙。

路漫漫其修遠兮,吾將上下而求索。