1. 程式人生 > >PAT乙級——1087(陣列操作,輔助空間)java實現

PAT乙級——1087(陣列操作,輔助空間)java實現

題目: 有多少不同的值 (20 分)

當自然數 n 依次取 1、2、3、……、N 時,算式 n / 2 + n

/ 3 + n / 5 ⌊n/2⌋ + ⌊n/3⌋ + ⌊n/5⌋
有多少個不同的值?(注: x ⌊x⌋ 為取整函式,表示不超過 x 的最大自然數,即 x 的整數部分。)

輸入格式:
輸入給出一個正整數 N(2 ≤ N ≤ 10​4)。

輸出格式:
在一行中輸出題面中算式取到的不同值的個數。

輸入樣例:
2017

輸出樣例:
1480

題目分析及實現

取整操作既可以理解為除法操作,將結果儲存為int型時,會自動取整。

採用輔助空間的辦法,N計算的最大值大概是 1.2 N 1.2 * N ,為了方便,將輔助陣列的最大值設為了 2 N 2 * N

計算出了值後,將之對應下標位置的元素置為1,最後數一下1的個數即為結果。

import java.util.Scanner;

public class Main {
	public static void main(String []args) {
		Scanner in = new Scanner(System.in);
		int N = in.nextInt();
		in.close();
		int temp[] =new int[N*2];//輔助陣列空間
		for(int i=1;i<=N;i++) {
		    //從1到N依次計算
			int count =i/2 + i/3 + i/5;
			temp[count]=1;
		}
		int time=0;
		for(int i=0;i<2*N;i++) {
			if(temp[i]==1)
				++time;
		}
		System.out.print(time);
		
	}
}