4.2美团笔试2空间回廊

空间回廊

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
有一款叫做空间回廊的游戏,游戏中有着n个房间依次相连,如图,1号房间可以走到2号房间,以此类推,n号房间可以走到1号房间。

这个游戏的最终目的是为了在这些房间中留下尽可能多的烙印,在每个房间里留下烙印所花费的法力值是不相同的,已知他共有m点法力值,这些法力是不可恢复的。

小明刚接触这款游戏,所以只会耿直的玩,所以他的每一个行动都是可以预料的:

一开始小明位于1号房间。

如果他剩余的法力能在当前的房间中留下一个烙印,那么他就会毫不犹豫的花费法力值。

无论是否留下了烙印,下一个时刻他都会进入下一个房间,如果当前位于i房间,则会进入i+1房间,如果在n号房间则会进入1号房间。

当重复经过某一个房间时,可以再次留下烙印。

很显然,这个游戏是会终止的,即剩余的法力值不能在任何房间留下烙印的时候,游戏终止。请问他共能留下多少个烙印。

输入
输入第一行有两个正整数n和m,分别代表房间数量和小明拥有的法力值。(1<=n<=100000,1<=m<=10^18)

输入第二行有n个正整数,分别代表1~n号房间留下烙印的法力值花费。(1<=a_i<=10^9)

输出
输出仅包含一个整数,即最多能留下的烙印。

样例输入
4 21
2 1 4 3
样例输出
9

提示
样例解释:
显然是所有房间都留下两个烙印,然后剩下1点法力值,仅能在2号房间再留下一个烙印.

做题时思路

由题意可想到循环链表,建立Room类,属性mp,最后一个Room指向头结点。每经过一个房间,判断当前mp与房间mp之间的关系,决定是否执行count++,当所剩mp<房间最小mp时退出循环,最后输出count

代码实现(AC)
import java.util.Scanner;

class Room{

    public int mp;
    public Room next;

    public Room(int value){
        this.mp = value;
    }
}
public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int totalMP = in.nextInt();
        int[] s = new int[n];
        int minMp = Integer.MAX_VALUE;
        for (int i = 0; i < n; i++) {
            s[i] = in.nextInt();
            if (minMp>s[i]){
                minMp = s[i];
            }
        }
        int firstId = s[0];
        Room firstRoom = new Room(firstId);
        Room room = firstRoom;
        Room lastRoom = firstRoom;
        for (int i = 1; i < n; i++) {
            Room newroom = new Room(s[i]);
            room.next = newroom;
            room = room.next;
            lastRoom = newroom;
        }
        lastRoom.next = firstRoom;
        tanxian(firstRoom, totalMP,minMp);
    }

    private static void tanxian(Room firstRoom, int totalMP, int minMp) {
        int count = 0;
        while (totalMP>=minMp){
            if (totalMP>=firstRoom.mp){
                totalMP-=firstRoom.mp;
                count++;
            }
            firstRoom = firstRoom.next;
        }
        System.out.print(count);
    }
}

原创文章 31 获赞 3 访问量 1392

猜你喜欢

转载自blog.csdn.net/qq_45254908/article/details/105306463
今日推荐