幣種統計算法
單位給每一位員工發工資(精確到元),爲了保證不臨時換零錢,使得每一個員工取款的張數最少,在取工資前統計全部員工所須要的各類票面的張數(約定票種爲100,50,20,10,5,2,1元),並驗證幣種統計是否正確數組
算法描述實際上是省略了要求,用戶確定是要輸入員工數以及各位員工的工資code
定義:n位員工,G[n]對應了第n員工的工資
blog
a數組存放100元到1元的面值,a[0]=100,a[1]=50...im
b數組對應每一個面值的張數,b[0]對應100元的張數,b[1]對應50元的張數...統計
採用貪心策略,每次取最大面值next
System.out.println("輸入員工數n:"); Scanner scanner = new Scanner(System.in); int n=scanner.nextInt(); System.out.println("依次輸入員工的工資"); int[] G = new int[n]; for(int i=0;i<n;i++){ G[i]=scanner.nextInt(); } scanner.close(); int sumG = 0;//計算全體員工工資總和,便於以後的驗證 int sum = 0; for(int i=0;i<G.length;i++){ sumG = sumG + G[i]; } int[] a = {100,50,20,10,5,2,1};//7個面值不一樣幣種 int[] b = new int[7];//存放個面值對應的張數 boolean flag = true; for(int i=0;i<G.length;i++){ for(int j=0;j<a.length;j++){ while(G[i]>=a[j]){//每次取最大面值 G[i]=G[i]-a[j]; b[j]++;//當前面值對應的張數+1 } } } //顯示各面值對應須要的張數 for(int i=0;i<b.length;i++){ System.out.println("須要"+b[i]+"張面值爲"+a[i]+"元的紙幣"); sum = sum+b[i]*a[i]; } //驗證,各個面值與其對應的張數想乘的總和等於所有員工工資的總和,則說明算法正確 if(sumG==sum){ System.out.println("該算法正確!"); }