1. 程式人生 > >網易遊戲筆試題(1)

網易遊戲筆試題(1)

題目描述:

小明是幼兒園的一名老師。某天幼兒園園長給小朋友們每人發一顆糖果,小朋友們拿到後發現有一些同學拿到的糖果顏色和自己相同,有一些同學糖果顏色和自己不同。 

假定每個小朋友只知道有多少同學和自己拿到了相同顏色的糖果。 

上課後,有一部分小朋友興奮的把這一結果告訴小明老師,並讓小明老師猜一猜,最少有多少同學拿到了糖果。 

例如有三個小朋友告訴小明老師這一結果如下: 

其中第一個小朋友發現有1人和自己糖果顏色一樣,第二個小朋友也發現有1人和自己糖果顏色一樣,第三個小朋友發現有3人和自己糖果顏色一樣。 

第一二個小朋友可互相認為對方和自己顏色相同,比如紅色; 

第三個小朋友不可能再為紅色(否則第一二個小朋友會發現有2人和自己糖果顏色相同),假設他拿到的為藍色糖果,那麼至少還有另外3位同學拿到藍色的糖果,最終至少有6位小朋友拿到了糖果。 

現在請你幫助小明老師解答下這個謎題。 

   本文采用的ArrayList,方便操作元素,程式碼如下:

package youeryuan;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class main {

	public static void main(String[] args) {
		System.out.println("請輸入去跟老師彙報的人數:");
		Scanner sca1=new Scanner(System.in);
		//去跟老師彙報的人數
		int n=sca1.nextInt();
		//每個學生彙報的數目
		ArrayList<Integer> list=new ArrayList<>(n);
		//遍歷賦值
		for (int i = 0; i <n; i++) {
			Scanner sca2=new Scanner(System.in);
			list.add(sca2.nextInt());

		}
		System.out.println(list);
		int sum=0;
         for (int i = 0; i < list.size(); i++) {
        	 int f=1;
	           for (int j = i+1; j < list.size(); j++) {
					if (list.get(i)==list.get(j)) {
						f++;
						list.set(j, 0);
					}
			}    
	           if (list.get(i)!=0) {
	        	   if ((list.get(i)+1)>=f) {
	   				sum=(sum+list.get(i)+1);
	   			}else {
	   				sum+=(f%list.get(i))*list.get(i)+f/list.get(i);
	   			}
			}
	           
	             
	           for (int j = 0; j < list.size(); j++) {
	        	   int s=list.indexOf(0);
	        	   if (s!=-1) {
	        		   list.remove(s);
	        	   }
			}
	}
        System.out.println(sum);
}
}

進行驗證:

請輸入去跟老師彙報的人數:
3
1
1
3
[1, 1, 3]
6