創新工場筆試題 幫忙詳解


1,有1分,2分,5分,10分四種硬幣,每種硬幣數量無限,給定n分錢,求有多少種組合可以組合成n分錢?

2,馬戲團里有個疊羅漢的表演,為了便於美觀,下面的人身高和體重都要大於上面的人。現在知道n個演員的身高和體重,請問最多能疊多少層?

19 个解决方案

#1


該回復於2012-10-04 13:25:28被版主刪除

#2


靠,蛋疼的算法題目。。。。。

#3


第二題  1+2+3+。。。+x   --表示可以疊x層?  然后等差數列求和?等於n個人? 不知道對不?

#4


第一題這樣行不:

寫4個循環,層層嵌套。。。。。分別對應4中面值的硬幣。。。迭代變量是硬幣個數,從一枚開始,迭代條件是硬幣總面值小於n。

吧所有可能組合窮舉出來。。。。。。。。。。。。。。。。。。。。。。。

#5


第一題么。。。

寫個類,代表雜技演員,然后這個類有倆屬性,身高和體重,然后實現comparable接口,比較邏輯就是“下面的人身高和體重都要大於上面的人”。

然后把這些對象都放進一個TreeSet,最后TreeSet中元素個數就是最高能疊多少層。。。。

#6


第一個題  for()循環嵌套 
import java.util.Scanner;
public class Coin
{
public static void main(String [] args)
{
int sum=0;
System.out.println("Input a number is  n:"); //輸入一個n的值
Scanner input = new Scanner(System.in);
int n=input.nextInt();
for(int i=0;i<=n/10;i++)  // 10 分 的個數
for(int j=0;j<=(n-10*i)/5;j++)  //5分 的個數
for(int m=0;m<=(n-10*i-5*j)/2;m++)  // 2 分的個數
for(int t=0;t<=n-10*i-5*j-2*m;t++)  // 1分的個數
if(10*i+5*j+2*m+t==n)   // 判斷是不是 相等
                              sum++;
System.out.println(sum);
}
}

#7



按照這個來就可以  樓主要代碼么???
引用 5 樓  的回復:
第一題么。。。

寫個類,代表雜技演員,然后這個類有倆屬性,身高和體重,然后實現comparable接口,比較邏輯就是“下面的人身高和體重都要大於上面的人”。

然后把這些對象都放進一個TreeSet,最后TreeSet中元素個數就是最高能疊多少層。。。。

#8


引用 7 樓  的回復:
按照這個來就可以 樓主要代碼么???

引用 5 樓 的回復:

第一題么。。。

寫個類,代表雜技演員,然后這個類有倆屬性,身高和體重,然后實現comparable接口,比較邏輯就是“下面的人身高和體重都要大於上面的人”。

然后把這些對象都放進一個TreeSet,最后TreeSet中元素個數就是最高能疊多少層。。。。


貼代碼

#9


引用 7 樓  的回復:
按照這個來就可以  樓主要代碼么???引用 5 樓  的回復:

第一題么。。。

寫個類,代表雜技演員,然后這個類有倆屬性,身高和體重,然后實現comparable接口,比較邏輯就是“下面的人身高和體重都要大於上面的人”。

然后把這些對象都放進一個TreeSet,最后TreeSet中元素個數就是最高能疊多少層。。。。

貼代碼!!!!!!

#10


代碼在這里 
package practice;

import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Test {
public static void main(String[] args) {
Set<Person> set = new TreeSet<Person>(new Mycomparator());

Person p1 = new  Person(18.1,57.5);
Person p2 = new Person(17.2,56.4);
Person p3 = new Person(18.3,45.5);
Person p4 = new Person(16.5,80.5);
Person p5 = new Person(19.3,60.5);
Person p6 = new Person(19.2,56.0);
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
set.add(p5);
set.add(p6);
for(Iterator ite =set.iterator();ite.hasNext();){
Person p = (Person)ite.next();
System.out.println(p.getHeight());


}



}

 class Person 
 {
private double height;
private double weight;
public Person(double height,double weight){
this.height=height;
this.weight=weight;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
  }
}
 // 自定義的比較器
 class Mycomparator implements Comparator{


public int compare(Object o1,Object o2) {
Person p1 =(Person)o1;
Person p2 =(Person)o2;
// 比較只能體重和身高都占優勢的時候才能加進去
if(p1.getHeight()>p2.getHeight()&&p1.getWeight()>p2.getWeight()){
return 1;
}else if(p1.getHeight()<p2.getHeight()&&p1.getWeight()<p2.getWeight()){
return 1;
}
return 0;
}
 
 }隨便找了幾個進去測的 有不對之處 請指教。

#11


忘了打印。 在main方法里最后打印下TreeSet數組長度就可以了

#12


第一題可以用枚舉的數據

#13


引用 6 樓 zhaoming262350 的回復:
第一個題  for()循環嵌套 
import java.util.Scanner;
public class Coin
{
public static void main(String [] args)
{
int sum=0;
System.out.println("Input a number is  n:"); //輸入一個n的值
Scanner input = new ……


哥們,你很厲害哈。學習啦。代碼已測正確。

#14


引用 10 樓  的回復:
代碼在這里 
package practice;

import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Test {
public static void main(String[] args) {……

這樣舉一個例子
     身高    體重
A:  200     200
B:  100     150
C:  150     100
D:  110     50      
E:  80      30  
如果按照ACDE的順序可以添加4層,如果按照ABE的順序只能添加三層。
而你的遍歷的順序是先后,也就說第一個添加之后,第二個數據應該是先添加B,也就是錯誤的數據。
我覺得出題的人應該就是想考是不是考慮到這一層,第一層的出題點我還沒想出來,我感覺應該不是簡單的FOR循環那么簡單,暫時猜測是不是考的是算法的運算時間。

#15


該回復於2012-10-05 19:42:36被版主刪除

#16


恩,代碼有點問題,這個得再考慮考慮
引用 14 樓  的回復:
引用 10 樓  的回復:
代碼在這里
package practice;

import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Test {
public static void main(S……

#17


import java.util.Scanner;

//有1分,2分,5分,10分四種硬幣,每種硬幣數量無限,給定n分錢,求有多少種組合可以組合成n分錢?
public class Test {
public static void main(String[] args) {
int x1,x2,x5,x10;//分別定義1,2,5,10分錢的數量
int sum=0;
Scanner input = new Scanner(System.in);
int n=input.nextInt();//接收輸入的n
for(x10=0;x10<=n/10;x10++){
for(x5=0;x5<=(n-x10*10)/5;x5++){
for(x2=0;x2<=(n-x10*10-x5*5)/2;x2++){
for(x1=0;x1<=(n-x10*10-x5*5-x2*2);x1++){
if((x1+2*x2+5*x5+10*x10)==n){
sum++;
}
}
}
}
}
System.out.println("組合共有"+sum+"種");
}
}
第一題把6樓的代碼改進了一下,不知道還有沒有更高效的,可以分享下。
第二題有空再寫了,有點晚了,先睡了

#18


不好意思,看錯了6樓的代碼,我上面和6樓的一樣,心想的那個方法是代碼復用的,今晚上還未實現。
抱歉了

#19


引用 14 樓  的回復:
引用 10 樓 的回復:
代碼在這里
package practice;

import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Test {
public static void main(Str……


這個問題哪個大神來解決啊
學習一下。。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com