问题描述:
假设你的爱好是看书。目前总共有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--------------------------------------------------------------------------------

解决方案 »

  1.   

     public class aa{public int numberOfDistinctBooks(int[] money, int[] bookList) 
    {   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");
    }
    }
    }
    这个程序有问题,而且没太明白你的意识。仅供参考一下&