首页 > 试题广场 >

年会抢玩偶游戏

[编程题]年会抢玩偶游戏
  • 热度指数:3441 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

某公司年会上,组织人员安排了一个小游戏来调节气氛。游戏规则如下:

N个人参与游戏,站成一排来抢工作人抛来的M个小玩偶。为了增加游戏的趣味和难度,规则规定,参与游戏的人抢到的礼物不能比左右两边的人多两个或以上,否则会受到一定的惩罚。游戏结束时拥有玩偶最多的人将获得一份大奖。
假设大家都想赢得这份大奖,请问站在第K个位置的小招在赢得游戏时,最多能拥有几个玩偶?

输入描述:
输入为用空格分隔的3个正整数,依次为:参与游戏人数N、玩偶数M、小招所在位置K


输出描述:
输出为1个正整数,代表小招最多能够拥有的玩偶数。若没有,则输出0。
示例1

输入

1 1 0

输出

0
示例2

输入

1 3 1

输出

3
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int M = scanner.nextInt();
        int K = scanner.nextInt();
        if (N == 0 || M == 0 || K <= 0 || K > N) {
            System.out.println(0);
            return;
        }
        for (int max = M; max > 0; max--) {
            int result = max;
            for (int i = K-1; i > 0; i--) {
                result += max+i-K;
            }
            for (int i = K+1; i <= N; i++) {
                result += max-i+K;
            }
            if (result <= M) {
                System.out.println(max);
                return;
            }
        }
    }
}
发表于 2021-09-27 20:21:20 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while (in.hasNext()){
            int N = in.nextInt();
            int M = in.nextInt();
            int K = in.nextInt();
            System.out.println(getMax(N,M,K));
        }
    }
    public static int getMax(int N,int M,int K){
        if(N<=0 || M<=0 || K<=0 ||K>N) return 0;
        int sum =0 ;
        int max = 0;
        if(N==2 && M==2) return 1;
        while(sum<M){
            max+=1;
            sum = (max-K+1+max)*K/2+(max+max-(N-K+1)+1)*(N-K+1)/2-max;
            if(sum==M){return max;}
            
        }
        return max-1;
        
        
    }
}
通过了所有测试用例。思路:k位置最大值是max,求所有人玩偶数量的和,k位置想要最大其他人只能是1的等差数列,sum必须不大于M。找出符合条件的max值。
发表于 2020-06-28 10:31:06 回复(1)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int k = sc.nextInt();
        if(m==0 || n==0 || kn){
            System.out.println(0);
            return;
        }
        System.out.println((m + (k*(k-1)/2) + ((n-k+1)*(n-k)/2))/n);
    }
}
发表于 2020-06-18 11:18:30 回复(0)