三七互娱笔试,宝石合成问题

今天笔试遇到道题一直解不出来,3个低级宝石可以合成1个高一级的宝石,五个低级宝石可以合成两个高一级的宝石,问1个N级宝石最少需要几个一级宝石合成,
如N=2时返回3,N=3时返回8,N=4时返回20,N=5时返回50,N=60返回125,代码应该怎么写呢?到处找答案都没有,这里有没有大神给个思路?

----------分割线------------
参考@Johnsonq的代码,他的注释说实话没怎么懂,自己还太菜了,写了下自己的理解
import java.util.Scanner;

public class Huyu37 {
    /**
     * 我需要1个N级宝石,则最少需要3个N-1级宝石
     * 需要3个N-1级宝石,则最少需要(3-1)*5/2+3个N-2级宝石,这三个N-1级宝石的其中两个由快捷方式合成,另外一个传统合成
     * 那么我就需要8个N-2级宝石,则他们可以分4批由快捷合成,即需要8*5/2个N-3级宝石也就是20个
     * 那么我们需要20个N-3级宝石,则需要50个N-4级宝石
     * 需要50个N-4级宝石,就需要125个N-5级宝石
     * 需要125个N-5级宝石,就需要通过快捷方式合成其中的124个,剩下的一个由传统方式合成,即需要124*5/2+3=313个N-6级宝石
     * 需要313个M-6级宝石,则需要312*5/2+3=783个N-7级宝石
     * 需要783个N-7级宝石,就需要1958个N-8级宝石,就需要4895个N-9级宝石...
     */
    public static void main(String[] args) {
//        int n = 6;
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int temp = n;
        int sum = 1; //需要sum个n级宝石,temp和sum都在变化,要计算需要sum个temp级宝石
        while (temp != 1) {//循环结束意味着着需要sum个1级宝石
            //如果需要奇数个temp级宝石
            if (sum%2 == 1) {
                //则需要3+(sum-1)*5/2个temp-1级宝石
                sum = 3+(sum-1)*5/2;
                temp--;
            }else if (sum%2 == 0) {//如果需要偶数个temp级宝石
                //则需要sum*5/2个temp-1级宝石。这偶数个temp宝石全部由快捷方式合成
                sum = sum*5/2;
                temp--;
            }
        }
        System.out.println(sum);
    }
}


#三七互娱笔试##笔试题目##三七互娱#
全部评论
Scanner in  = new Scanner(System.in);         while(in.hasNext()){             int level = in.nextInt();             int num = 1;             while(level > 1){                 if(num % 2== 0){                //当前层是偶数个元素的时候,全用2换5                     num = num /2 *5;                 }else{               //把前面全部元素2换5,最后一个换3                     num = (num -1)/2*5+3;                 }                 level--;             }             System.out.println(num);         } 我也是考试时候短路,回头一看,真的简单。。。。跪了
6 回复 分享
发布于 2020-09-02 23:33
今天线下宣讲遇到这题,最后才做出来 关键是最后要递归到1级宝石才可以保证用的最少 public int getNum(int level){         return helper(level,1);     } public static int helper(int level,int coff){         if(level == 1)return level*coff;         int coff5 = coff/2;         int coff3 = coff%2;         return helper(level-1,coff5*5+coff3*3);     }
1 回复 分享
发布于 2020-09-17 22:29
兄弟,我只有一道编程题,难道是我看错了?你有没有一道是说怎么改造class S使得下面的程序同步输出
1 回复 分享
发布于 2020-09-02 22:55
def min_num(level):    cul_num = 1    for i in range(level-1):       cul_num = cul_num//2*5+(cul_num%2)*3    return cul_num
点赞 回复 分享
发布于 2020-10-11 17:55
public static int getNum(int level){ if(level==1)return 1; if(level==2)return 3; if(level==3)return 8; return getNum(level-1)/2*5; }
点赞 回复 分享
发布于 2020-09-02 23:22
int[] dp = new int[level + 1]; dp[level] = 1; for (int I = level - 1; I > 0; --i){    dp[i] = dp[i + 1] * 3;    dp[i] = dp[i] - dp[i] / 5; }  return dp[1]; 我是这样子实现的。
点赞 回复 分享
发布于 2020-09-02 22:44
3*5/2=7.5,向上取整8 8*5/2=20 20*5/2=50 50*5/2=125 可能这样的规律吧
点赞 回复 分享
发布于 2020-09-02 22:32

相关推荐

10-10 16:30
济宁学院 Java
一表renzha:面试官:蓝桥杯三等奖?你多去两次厕所都能拿二等吧
点赞 评论 收藏
分享
真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
6
13
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务