试题 算法提高 双十一抢购

资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

  一年一度的双十一又来了,某网购网站又开始了半价销售的活动。

  小G打算在今年的双十一里尽情地购物,以享受购买的极度快感,她已经列好了她想买的物品的列表。

  当然小G并不是出身富贵家庭,所以她网银里的钱只是一个有限的整数S(单位:元)。

  这次抢购她打算遵循这三个原则选择每一个物品:

  1.先买能“赚”最多的;

  2.在“赚”一样多的情况下,先买最便宜的(这样买的东西就可能更多了);

  3.在前两条里都判断不了购买顺序的话,先购买在列表里靠前的。

  (由于网站里还是有一部分商品并没有打五折,所以2的情况(“赚”的钱数为0)是完全可能发生的)

  现在,在双十一的这一天,你要帮小G编写一个程序,来看看她应该去买她列表里的哪些物品。(总价格不要超过S哦)

  要是帮她写好这个程序的话,或许你能在光棍节这一天里赢得她的芳心哦~

输入格式

  输入共N+1行。

  第一行包含两个整数S和N,S表示小G的可用金额,N表示她看上的物品个数。

  接下来N行,对应每一个物品,每行有两个整数a和b,a是物品的原价(单位:元),b为0或1,若b为0,则此物品不半价,若b为1,则此物品半价销售。

输出格式

  输出共一行,为小G要买的物品序号(从1开始),用空格隔开,注意按序号从小到大输出。

  若小G一件都买不了,则输出0.

样例输入

10 3

5 0

4 0

10 1

样例输出

2 3

样例输入

10 3

11 0

21 1

100 1

样例输出

0

数据规模和约定

  0<S<=10000,0<N<=1000,每一个a和b满足0<a<=1000且b=0或1。

package com.company;

import java.util.Arrays;
import java.util.Scanner; public class 双十一抢购 { public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//sum表示小G的可用金额
double sum=sc.nextDouble();
//N表示她看上的物品个数
int N=sc.nextInt();
//创建所有商品的集合
Goods []arr=new Goods[N];
//给商品赋值
for(int i=0;i<N;i++){
arr[i]=new Goods();
arr[i].price=sc.nextDouble();
arr[i].off=sc.nextInt();
arr[i].num=i+1;
}
//按照下面这种方式排序
for(int i=0;i<N-1;i++){
for(int j=i+1;j<N;j++){
if(arr[i].price*arr[i].off<arr[j].price*arr[j].off){//先买能“赚”最多的
Goods temp;
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
else if(arr[i].price*arr[i].off==arr[j].price*arr[j].off){
if(arr[i].price>arr[j].price){//在“赚”一样多的情况下,先买最便宜的
Goods temp;
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
else if(arr[i].price==arr[j].price){
if(arr[i].num>arr[j].num){
//在前两条里都判断不了购买顺序的话,先购买在列表里靠前的
Goods temp;
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
}
}
//创建一个结果的数组,进行存储要购买的序号
int []result=new int[N];
//用来存储商品的数目
int count=0;
//按照刚才排号的顺序,进行购买
for(int i=0;i<N;i++){
double realPrice=arr[i].price-arr[i].price*arr[i].off*0.5;
if(realPrice<=sum){
sum-=realPrice;
result[count]=arr[i].num;
count++;
}
}
//如果没有商品的话,就输出0,结束程序
if(count==0){
System.out.print(0);
System.exit(0);
}
//给商品号进行排序
Arrays.sort(result);
for(int i=0;i<N;i++){
if(result[i]!=0){
System.out.print(result[i]+" ");
} } }
//创建一个商品的类
public static class Goods{
int num;//序号
double price;//原价
int off;//折扣
public Goods(){
num=0;
price=0;
off=0;
}
}
}

Java实现 蓝桥杯 算法提高 双十一抢购的更多相关文章

  1. Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

    试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

  2. Java实现 蓝桥杯 算法提高 小X的购物计划

    试题 算法提高 小X的购物计划 问题描述 小X打算去超市shopping.小X没什么钱,只有N元.超市里有M种物品,每种物品都需要money,在小X心中有一个重要度.有的物品有无限件,有的物品只有几件 ...

  3. Java实现 蓝桥杯 算法提高 天天向上(DP)

    试题 算法提高 天天向上 问题描述 A同学的学习成绩十分不稳定,于是老师对他说:"只要你连续4天成绩有进步,那我就奖励给你一朵小红花."可是这对于A同学太困难了.于是,老师对他放宽 ...

  4. Java实现 蓝桥杯 算法提高 欧拉函数(数学)

    试题 算法提高 欧拉函数 问题描述 老师出了一道难题,小酱不会做,请你编个程序帮帮他,奖金一瓶酱油: 从1-n中有多少个数与n互质? |||||╭══╮ ┌═════┐ ╭╯让路║═║酱油专用车║ ╰ ...

  5. Java实现 蓝桥杯 算法提高 计算超阶乘(暴力)

    试题 算法提高 计算超阶乘 问题描述 计算1*(1+k)(1+2k)(1+3k)-(1+n*k-k)的末尾有多少个0,最后一位非0位是多少. 输入格式 输入的第一行包含两个整数n, k. 输出格式 输 ...

  6. Java实现蓝桥杯 算法提高 线段和点

    算法提高 线段和点 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 有n个点和m个区间,点和区间的端点全部是整数,对于点a和区间[b,c],若a>=b且a<=c,称点a满 ...

  7. Java实现蓝桥杯-算法提高 P1003

    算法提高 P1003 时间限制:1.0s 内存限制:256.0MB 作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词.不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检 ...

  8. Java实现蓝桥杯 算法提高 八皇后 改

    **算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...

  9. Java实现 蓝桥杯 算法提高 高精度减法(JDK方法)

    试题 算法提高 高精度减法 问题描述 高精度减法 输入格式 两行,表示两个非负整数a.b,且有a > b. 输出格式 一行,表示a与b的差 样例输入 1234567890987654321 99 ...

随机推荐

  1. SpringBoot 整合SpringBatch实际项目改造

    SpringBoot整合SpringBatch项目,已将代码开源至github,访问地址:https://github.com/cmlbeliever/SpringBatch 欢迎star or fo ...

  2. Aangular 父子间组件传递

    1.父子间组件传递------重点&难点 Vue.js和Angular中的父子间消息传递原理一样,都可以用口诀: “Props Down,Events Up” 方向1:父 =>子 父组件 ...

  3. 5.2 Go 包与函数

    5.2 Go 包与函数 在多个包中相互调用函数,需要用到Go包的知识. 代码组织如下: 思路: 1.定义功能函数calc放入到utils.go,将utils.go放在utils文件夹/包中,当其他文件 ...

  4. 微软 Build 大会发布大量开发工具与服务!编码、协作、发布,如丝般顺滑

    Microsoft Build 2020开发者大会已经圆满落幕,在连续两天48小时的不间断直播中,来自全世界的开发者共赴盛宴,场面相当壮观.在这一年一度的大聚会里,微软也是诚意满满,带来了一连串的产品 ...

  5. BZOJ1040 基环森林 找环+基础树形DP

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4752  Solved: 1831[Submit][Status ...

  6. 【MySQL】如何解决分库分表遇到的自增主键的问题?

    雪花算法 Redis生成主键

  7. Java并发编程入门(二)

    1.竞态条件 1.1 定义 当某个计算的正确性取决于多个线程的交替执行时序时,就会发生竞态条件.换句话说,正确的结果要取决于运气. 最常见的竞态条件类型:先检查后执行(Check-Then-Act)操 ...

  8. 还不会K8S吗?先从kubeadm开始吧

    目录 1. 准备工作 1.1 机器准备 1.2 系统配置 1.2.1 主机名及域名解析 1.2.2 免密登录 1.2.3 配置yum源 1.2.4 安装必要依赖包 1.2.5 关闭防火墙.SELinu ...

  9. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(三)

    在前面两篇文章中,我介绍了基于IdentityServer4的一个Identity Service的实现,并且实现了一个Weather API和基于Ocelot的API网关,然后实现了通过Ocelot ...

  10. VueCli4构建项目如何配置文件路径别名?

    1.在项目文件根目录上创建 vue.config.js 文件 2.写入以下代码,具体内容见注释: const path = require('path') // 引入path模块 function r ...