• 算法题:购买n个苹果,苹果6个一袋或者8个一袋,若想袋数最少,如何购买?


    这是面试一家公司java实习生的算法题,我当时把代码写出来了,但是回学校之后搜索别人的算法,才发现自己的算法实在是太简陋了呜呜呜

    我的算法:

    public void buy(int n){
      int min=9999;
      int sum=0;
       for(int i=0;i<=n/6;n++){
           for(int j=0;j<=n/8;j++){
                if(i*6+j*8==n){
                 sum=i+j;
                 if(sum<min){
                 min=sum;
                }
               }
       System.out.println("最少购买的袋数为"+min);
    }

    我的思路是在 i 和 j 可能的范围内进行两次for循环,如果满足总苹果树为n,则给sum赋值,又因为要得到最少的袋数,所以紧接着用来选择排序来查找总袋数最少的情况。这个思路很死板,又要进行匹配又要进行排序。第一个可以改进的地方就是可以避免对j的循环,直接用if((n-i*6)/8==0)来代替,可以减少时间复杂度;第二个可以改进的地方就是得到最少袋数,不在得到sum之后对sum进行排序,而是从根源出发,思考如何才能使总袋数最少,于是得出思路----应该让8个一袋的袋数尽量的多。

    下面是从网上借鉴的比较好的算法:

    int solution(int n){
      int pack8=n/8;
      int pack6=0;
      int pack=0;
      for(pack8;pack8>=0;pack8--){
       if(n-pack8*8)/6==0){
       pack6=(n-8*pack8)/6;
       pack=pack8+pack6;
       return pack;
      }
     }
    }
  • 相关阅读:
    vbScript首字拼音查询
    C#读取U盘序列号
    下拉 回车 筛选
    Oracle的汉字转拼音首字母的函数
    sql 触发器禁止和启用
    List.FindAll 方法
    MyControl 常用操作
    List.Find 方法
    regsvr32 C:\WINDOWS\system32\cell32.ocx
    2222222
  • 原文地址:https://www.cnblogs.com/iceywu/p/11862554.html
Copyright © 2020-2023  润新知