华为OD机试真题-最多获得的短信条数(最简单,思路清晰写法)

题目描述

某云短信厂商,为庆祝国庆,推出充值优惠活动。 现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。

        输入

                第一行客户预算M,其中 0 ≤ M ≤ 10^6 

                第二行给出售价表, P1, P2, … Pn , 其中 1 ≤ n ≤ 100 , 

                Pi为充值 i 元获得的短信条数。

                1 ≤ Pi ≤ 1000 , 1 ≤ n ≤ 100

        输出

                最多获得的短信条数

        样例输入

6
10 20 30 40 60

样例输出 

70

 解题思路:

难点一:

        首先就是弄清楚题意,n为客户所充值的钱数,Pi为商家所送的短信数。

 难点二:

        不要多想什么东西,输入的短信一定时充值越多,送的越多,不可能存在说 n = 3+4两个充值时,短信总数是70,而n= 7时,短信总数是60的情况,商家为利,不是傻。所以说最终利润一定是  profit= M(客户预算)/len(售价表长度)*arr1[len-1]  +arr1[M%len]  (去除最大的,剩下的预算所对应的短信数)。

难点三:

        这是对不怎么了解过Scanner输入的人来说比较难的,如何进行输入。因为题目并没有给出售价表的长度,因此这是会用到Scanner当中的s.hasNextInt()函数进行停止输入判断。先弄一个比较大的数组进行接受,函数作用是点回车结束这次数组的输入,重新弄一个数组进行遍历操纵,就能得到我们所需要的数组的了。

直接上代码:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int M= Integer.parseInt(sc.nextLine());
    String s = sc.nextLine();  
    Scanner s1 = new Scanner(s);
    int[] arr = new int[100];
    int k =0;
    while(s1.hasNextInt()){
        arr[k++]= s1.nextInt();
    }
    int[] arr1 = new int[k];  将
    for(int i =0;i<k;i++){
        arr1[i] = arr[i];
    }
    int max = 0;
    int len = arr1.length;
    max = (M/len*arr1[len-1]+arr1[M%len-1]);
    System.out.println(max);

}

 结果:

 这里只针对小菜,当然还有更好的解法,这只是为了让人更容易理解。

华为OD机试真题-学生重新排队是一个典的编程问题,下面是问题和解决路: 问题描述: 有n个学生站成一排,每个学生都有一个独一无二身份ID。现在给定一个初始的学生排列顺序,以及一系列的交换操作,交换操作表示将两个学生的位置进行交换。请你编写一个算法,输出最终的学生排列顺序。 解决思路: 这个问题可以使用数组来表示学生的排列顺序。首先,我们需要根据初始的学生排列顺序构建一个映射表,将每个学生的ID与其在数组中的位置对应起来。然后,我们按照给定的交换操作,更新映射表中学生的位置信息。最后,根据更新后的映射表,构建最终的学生排列顺序。 具体步骤如下: 1. 构建映射表:遍历初始的学生排列顺序,将每个学生的ID与其在数组中的位置对应起来,可以使用哈希表来实现。 2. 执行交换操作:按照给定的交换操作,更新映射表中学生的位置信息。 3. 构建最终的学生排列顺序:根据更新后的映射表,构建最终的学生排列顺序。 下面是一个示例代码,用于解决这个问题: ```python def rearrange_students(initial_order, swap_operations): # 构建映射表 mapping = {} for i, student_id in enumerate(initial_order): mapping[student_id] = i # 执行交换操作 for swap in swap_operations: student1, student2 = swap mapping[student1], mapping[student2] = mapping[student2], mapping[student1] # 构建最终的学生排列顺序 final_order = [0] * len(initial_order) for student_id, position in mapping.items(): final_order[position] = student_id return final_order ``` 使用上述代码,你可以通过传入初始的学生排列顺序和交换操作,得到最终的学生排列顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽油——先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值