问题描述:
假设你的爱好是看书。目前总共有N种不同的书籍,编号为从0到N-1.每种书籍的价钱被定义在数组int[] money中(序号从0开始,数组的第i个元素表示第i种书籍的价格)。
你的目标是收集尽可能多种的书籍。你当前拥有的书籍存储在int[] bookList这个数组中。初始时,你没有钱,但是你可以卖掉已有书籍来买不同的书籍。返回你能收集到的不同种书籍的最大数量。
定义:
class: BooksCollection
method: numberOfDistinctBooks
Parameters: int[], int[]
Returns: int
Method signature: public int numberOfDistinctBooks(int[] money, int[] bookList)
//为了进行测试,必须保证是public
约束:
1) N从1到50
2)money中的元素数量刚好是N个元素
3)money中的元素的值,从1到1,000,000
4)bookList中的元素数量是0个到N个
5)bookList中的每个元素是不同的
6)bookList中的每个元素的值是从0到N-1.
例如:
1)
{13,10,14,20}
{3,0,2,1}
Returns: 4
你已经拥有所有种类的书籍。
2)
{7,5,9,7}
{}
Returns: 0
你开始没有任何书籍,所以你也不能组任何事情。
3)
{4,13,9,1,5}
{1,3,2}
Returns: 4
卖掉书籍2,买入书籍0和4,(书籍2的价钱是9,书籍0的价钱是4,书籍4的价钱是5,卖掉2刚好买入0和4)
4)
{16,32,13,2,17,10,8,8,20,17}
{7,0,4,1,6,8}
Returns: 8--------------------------------------------------------------------------------
{ int result=0;
if(bookList.length<=0)//没有书时不做任何事
System.out.println("you cann‘t do anything
if(bookList.length==money.length)");//当所有的书都已经有时,返回n值
return money.length;
else{
for(int i=0;i<money.length;i++){//求你所拥有的书的总价格
for(int j=0;j<bookList.length;j++){
if(i==bookList[j])
result+=money[i];
}
}
for(int i=0;i<money.length;i++){//给所有书价排序
for(int j=i+1;j<=money.length;j++)
{
if(money[i]>money[j])
{
money[i]=money[i]^money[j];//交换两个值
money[j]=money[i]^money[j];
money[i]=money[i]^money[j];
}
}
}
int hom=0,f=0;
for(int t=0;t<=money.length;t++)//用你拥有的钱购买书,这里有问题
{
hom+=money[t];
f++;
if(hom>=result) {
break;//当hom的值超过result时跳出循环
}
}
}
return f;
}
public static void main(String[] args){
try{
int[] book= {1,2,3,4,5,6,8,5,1};
int[] mybook={1,2,6};
aa b=new aa();
System.out.print(b.numberOfDistinctBooks(book,mybook));
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("gfg");
}
}
}
这个程序有问题,而且没太明白你的意识。仅供参考一下&