计挑赛决赛试题(2021(Java组)

1.临近年末,A公司准备给公司员工分法奖品,每名员工都可以提出自己期望的奖品。为了安排采购,公司统计了各种奖品的价格以及选择此奖品的人数。假如你是采购人员,需要申请财务报销。请你计算出这批奖品的总体价格标准差。

 公式中X1,X2,X3...Xn均为实数,其平均值(算术平均值)为μ,标准差为σ。

输入格式:
第一行,输入一个数字n(n≤1000),表示奖品的种类。
之后共n行,每行输入一个正整数x和一个浮点数y,分别表示选择某种奖品的人数和此奖品的价格。(0<x<1000,0<y<1000)
输出格式:
输出此奖品的总体价格标准差(四舍五入保留2位有效数字)
输入样例:
4
20 50.00
22 65.50
18 80.00
25 45.00
输出样例:
13.45

解题思路:标准差计算,考察数学能力

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n= sc.nextInt();
             //总人数,总价格
        double sum=0,sum1=0,ans=1;
        double[][] arr = new double[n][2];
        //存入数组,0列存入人数,1列存放价格
        for (int i = 0; i < n; i++) {
            arr[i][0]=sc.nextDouble();
            arr[i][1]=sc.nextDouble();
            //计算总人数和总价格
            sum+=arr[i][0];
            sum1+=arr[i][1]*arr[i][0];
        }
        //平均值=总价格/总人数
        double u=sum1/sum;
        for (int i = 0; i < arr.length; i++) {
            //人数*(对应的价格减去平均,然后求差的平方)
            ans+=arr[i][0]*Math.pow((arr[i][1]-u),2);
        }
        //除以总人数然后取平方根
        System.out.printf("%.2f",Math.sqrt(ans/sum));
    }
}

2.假如你可以对数字进行如下两种操作:
操作一:将当前数×3。
操作二:将当前数-1。
现在给出两个数n,m(0<n,m≤1000),请问你最少需要多少次操作才能将n变成m?
输入格式:
共一行,两个数字n,m。
输出格式:
输出最少的操作次数。
输入样例:
217
输出样例:
3

代码未保存

3.
假如有一个3*3*3的立方体,它有六个面,每个面共有九个小正方形。每个小正方形按如下规则染色:
角上的方格为red,中心的方格为green,其他的方格为blue。
初始有一个机器人站在立方体顶面的中心,面朝一个blue方格。它将接受到条如下指令:L':为左转90度R'为右转90度,W”:为向前走一格。
机器人可以穿过立方体的棱到达另一个面。给出指令,求出机器人最后经过的面的数量(立方体一共有6个面,每一侧的9个小正方形都属于一个面)。
输入格式:
第一行共一个数字n(0<n≤106),表示指令的条数。
接下来共n行,每行一个大写字母'L或R'或W”。
输出格式:
输出一个正整数,表示机器人最后经过的面的数量。
输入样例:
7
W
W
L
W
W
R
W
输出样例:
3

代码未保存

4.输入一个正整数n,之后输入n个正整数,输出这n个数中正序对的个数。
正序对:设A为一个有n个数字的集合(>1),其中所有数字各不相同。如果存在正整数i,j对,使得1
≤i<j≤n而且AU<A[j],则<A[,A[j]>这个有序对称为A的一个正序对。
输入格式:
第一行共一个数字n(0<n≤10^5)。
接下来一行输入n个正整数(大小不超过10^9)。
输出格式:
输出这n个数中正序对的个数。
输入样例:
4
1342
输出样例:
4
样例说明:
4对正序对分别为<1,3>,<1,4>,<3,4>,<1,2>。

代码未保存

5.小明的花店里有 M 个花盆,每个花盆里可以种植一种花,不同的数字表示不同种类的花。每当小明需要培育一种花的时候,他会先观察自己的花店里是否已有这种花,如果已有就无须再去购买。如果没有的话,会先买来花的种子,如果还有花盆处于空闲状态,就种下需要培育花的种子;否则会将最先种下的花拔掉改为种植需要的花。初始状态花店里所有的花盆都是空闲的。已知小明先后需要培育N次花(可能会培育同一种不止一次),花店有M个花盆。在该策略指导下,按种类从小到大的顺序输出最终花盆中的花。
输入格式:
第一行共两个数字M,N(0<M,N≤10^3).
接下来一行输入N个正整数(大小不超过10^9)。
输出格式:
按种类从小到大的顺序输出最终花盆中的花。
输入样例:
3 10
1 3 1 2 4 5 7 1 2 3
输出样例:
1 2 3

这道题是最后时间做的,不知道对不对,仅供参考

import java.util.*;
/**
 * @author whlie(true){learn}
 */
public class Main4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m=sc.nextInt();
        int n=sc.nextInt();
        List<Integer> list = new ArrayList<>();
        //两个下标标识,flag记录最早种植的花,count记录用了几个花盆
        int flag=0;
        int count = 0;
        for (int i = 0; i < n; i++) {
            int a=sc.nextInt();
            //判断店里是否已经有这个花了
            if (!list.contains(a)){
                //判断花盆是不是用完了
                if (count==m){
                    //拔掉最新种的花
                    list.remove(flag);
                    //空出一个花盆
                    count--;
                    list.add(flag,a);
                    count++;
                    flag++;
                    if (flag>=m){
                        flag=0;
                    }
                }else {
                    list.add(flag,a);
                    flag++;
                    if (flag>=m){
                        flag=0;
                    }
                    count++;
                }
            }
        }
        for (int i:list){
            System.out.print(i+" ");
        }
    }
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1while(true){learn}

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

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

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

打赏作者

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

抵扣说明:

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

余额充值