贪心算法解蓝桥杯JavaB组晚会节目

/**

  • /**

  • 问题描述
      小明要组织一台晚会,总共准备了 n 个节目。然后晚会的时间有限,他只能最终选择其中的 m 个节目。
      这 n 个节目是按照小明设想的顺序给定的,顺序不能改变。
      小明发现,观众对于晚上的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第一个节目尽可能好看,
    在此前提下希望第二个节目尽可能好看,依次类推。
    // 字典序最大
      小明给每个节目定义了一个好看值,请你帮助小明选择出 m 个节目,满足他的要求。
    输入格式
      输入的第一行包含两个整数 n, m ,表示节目的数量和要选择的数量。
      第二行包含 n 个整数,依次为每个节目的好看值。
    输出格式
      输出一行包含 m 个整数,为选出的节目的好看值。
    样例输入
    5 3
    3 1 2 5 4
    样例输出
    3 5 4
    样例说明
      选择了第1, 4, 5个节目。
    评测用例规模与约定
      对于 30% 的评测用例,1 <= n <= 20;
      对于 60% 的评测用例,1 <= n <= 100; 时间复杂度 50*50=2500
      对于所有评测用例,1 <= n <= 100000,0 <= 节目的好看值 <= 100000。
    10 5
    54 59 12 36 43 22 6 89 12 10
    10 5
    10 9 8 7 6 5 4 3 2 1

  • //贪心算法求区间最大值可得60分
    */
    import java.util.Scanner;
    public class Ten_Ans {
    public static void main(String[] args) {
    //键盘接收输入
    Scanner sca = new Scanner(System.in);
    //节目数量
    int num = sca.nextInt();
    //保留节目数量
    int lpro = sca.nextInt();
    //数组存储节目好看度
    int[] pros = new int[num];
    for(int i = 0; i < num; i++) {
    pros[i] = sca.nextInt();
    }
    sca.close();
    //指针1的位置
    int local1 = 0;
    //指针2的位置要保证能选取最少节目数量就是保留节目数量
    int local2 = num-lpro;
    //最好看的节目
    int max = pros[local1];
    //辅助指针
    int temp = 0;

    while(true) {
        //指针重合或者节目选完
         if(local2==local1||lpro==0) {
       	  break;
         }
        for(int i = local1 ;i <= local2 ;i++) {
       	
       	 //找到当前区间最好看的节目
       	     if(max<pros[i]) {
       	    	 max = pros[i];
       	    	 temp = i;	
       	     }
       	    
        }
        //输出区间最好看节目
        System.out.print(max+" ");
        //指针1后移
       
        local1 = temp+1;
        
        //指针2后移
        if(local2<pros.length-1) {
       	 local2++;
        }
        //保留节目数减少
        lpro--;
        //下一个节目暂定最好看节目
        max = pros[local1];
        //temp位置要与最好看节目位置一样
        temp = local1;
       
    }
    //如果节目没选完,指针重合,那剩下的节目必须全部入选
    if(lpro!=0) {
        for(int i = local1;i < pros.length; i++)
       	 System.out.print(pros[i]+" ");
    }
    

    }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2022蓝桥杯javab组真题析如下: 2022年蓝桥杯javab组真题从基础到进阶,难度适中,测试了参赛选手在Java编程语言方面的知识和能力。题目涵盖了数组、字符串处理、面向对象编程等多个知识点,考察了学生的编程思维和决问题的能力。 首先,题目要求实现一个学生成绩管理系统,包括学生信息录入、成绩查询、成绩统计等功能。通过类的设计和实例化,可以实现学生对象的创建和信息存储。使用数组或集合来存储多个学生对象,便于后续的查询和统计操作。 其次,题目要求实现一个简单的买卖股票的交易系统。需要设计一个股票类,其中包括股票名称、日期、买入价、卖出价等属性,然后通过输入的交易数据进行统计,计算利润最大化的买入和卖出操作。可以使用循环和条件语句来实现逻辑判断和计算运算。 最后,题目要求实现一个小型的计算器程序。可以通过实现不同的方法来实现加、减、乘、除等基本运算。可以使用条件语句或循环语句来判断用户输入的操作,并进行相应的计算操作。 总结来说,2022蓝桥杯javab组真题考察了参赛选手的编程能力和应用基础知识的能力,要求实现多个功能,并考察了类的设计和对象的使用。通过析这些真题,可以提高对Java编程语言的理和应用能力,对于参加类似的编程竞赛有一定的帮助作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值