刷题之莲子的软件工程学和机械动力学以及物理热力学

news2024/11/29 20:35:36

目录

1、莲子的软件工程学

1)题目

 2)题目解析

 3)代码

2、莲子的机械动力学

 2)题目解析

 3)代码

3、莲子的物理热力学

1)、题目

 2)题目解析


1、莲子的软件工程学

1)题目

题目背景

在宇宙射线的轰击下,莲子电脑里的一些她自己预定义的函数被损坏了。

对于一名理科生来说,各种软件在学习和研究中是非常重要的。为了尽快恢复她电脑上的软件的正常使用,她需要尽快地重新编写这么一些函数。

输入格式

  • 共一行两个整数 a,b。

输出格式

  • 共一行一个整数fun(a,b) 的值。

说明/提示

对于全部数据,保证 a,b 在 32 位有符号整型范围内,并且 b ≠0。

 2)题目解析

题目意思就是由b来确定a的正负性,并输出其结构,a是32 位有符号整型的范围 是 

-2^31~2^31-1)。因此我们应该使用long作为a,b的基本数据类型。

 3)代码

import java.util.Scanner;

public class Main {
    public static void main1(String[] args) {
        Scanner sc=new Scanner(System.in);
        long a=sc.nextInt();
        long b=sc.nextInt();
        if (b>0){
            System.out.println(Math.abs(a));
        }else if (b<0){
            System.out.println(Math.abs(a)*-1);
        }
    }
}

2、莲子的机械动力学

 

题目描述

题目背景的问题可以转化为如下描述:

给定两个长度分别为 n,m的整数 a,b,计算它们的和。

但是要注意的是,这里的 a,b 采用了某种特殊的进制表示法。最终的结果也会采用该种表示法。具体而言,从低位往高位数起,第 ii 位采用的是 i+1进制。换言之,相较于十进制下每一位的「逢 10进 1」,该种进制下第 i 位是「逢 i+1 进 1」。

下图所示,左边是十进制的竖式加法;右边是这种特殊进制的竖式加法。图中的红色加号表示上一位发生了进位。

输入格式

  • 第一行有两个整数n,m,分别表示 aa 和 bb 的位数。
  • 第二行有 n个整数,中间用空格隔开,从高到低位描述 a 的每个数码。
  • 第三行有 m 个整数,中间用空格隔开,从高到低位描述 b 的每个数码。

输出格式

  • 输出有若干个整数,从高到低位输出 a+b 在这种特殊表示法下的结果。

 

说明/提示

对于全部数据,保证 1≤n,m≤2×10^5,从低位往高位数起有 ai​∈[0,i],bi∈[0,i]。请使用 Java 或 Python 语言作答的选手注意输入输出时的效率。

 2)题目解析

 通读题目我们可以知道低位往高位数进制从2逐1递增,也就是最低位数是二进制的,要满2进1;倒数第二位数是三进制的,要满3进1;倒数第三位数是四进制的,要满4进1······第一位数是a,b最长数的长度+1进制

需要特别小心的是第一位数是否要再进一位。

 3)代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        //创建相应长度的数组
        int []ar1=new int[a];
        int []ar2=new int[b];
        for (int i=0;i<ar1.length;i++){
            ar1[i]=sc.nextInt();
        }
        for (int i=0;i<ar2.length;i++){
            ar2[i]=sc.nextInt();
        }
        //默认ar1是最长数的数组,寻找出a,b的最大值,并交换
        int max=Math.max(a,b);
        int []arr;
        if (max==b){
            arr=ar1;
            ar1=ar2;
            ar2=arr;
        }
        int count=0;//判断是否需要进位
        int t=2;    //当前的进制位
        //从后面开始循环,其结果存入ar1数组中
        for (int i=1;i<=ar1.length;i++){
            int x=ar1[ar1.length-i];
            if (i<=ar2.length){  //判断长度更小的数组是否存在越界
                ar1[ar1.length-i]=(x+ar2[ar2.length-i]+count)%t;
                count=(x+ar2[ar2.length-i]+count)/t;
            }else {
                ar1[ar1.length-i]=(x+count)%t;
                count=(x+count)/t;
            }
            t++;
        }
        //判断第一位数是否超出该进制的范围,并输出
        if (count!=0){
            System.out.print(count+" ");
        }
        for (int j=0;j<ar1.length-1;j++){
            System.out.print(ar1[j]+" ");
        }
        System.out.print(ar1[ar1.length-1]);
    }
}

3、莲子的物理热力学

1)、题目

题目背景

莲子正在研究分子的运动。

每个分子都有一个速度,约定正方向为正,负方向为负。分子的数量极多,速度又并不一致,看上去杂乱无章。于是莲子希望调整部分分子的速度,使得最终分子们看上去整齐。

 

输入格式

  • 第一行有两个正整数 n,m,分别表示序列的长度和你最多可以进行的操作次数。
  • 第二行有 nn 个整数 a,描述给定的序列。

输出格式

  • 输出共一行一个整数,表示最优策略下能得到的最小极差。

 

 2)题目解析

 分别输入两个数n和m,分别表示n个数和可以操作m次,操作是指定最小值变最大值或者最大值变最小值。然后计算n个数中最大值和最小值的差,即“最小化最终序列的极差”

我使用的方法是枚举法,分别从最小值开始,和最大值开始,分别求出最小的极差。

过程如下图,从最大值的过程也是类似。

 

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        long []arr=new long[n];
        for (int i=0;i<n;i++){
            arr[i]=sc.nextInt();
        }

        Arrays.sort(arr);
        long min=Integer.MAX_VALUE;
//m>=n,所以数都会被操作一遍,即都是同一个数,此时min=0
        if(m>=n) {
            min=0;
        }else if (m==0)
//m=0,min=arr[arr.length-1]-arr[0];
            min=arr[arr.length-1]-arr[0];
        else{
            int i=0;
            long l,r;
//从左边,最小值开始
            while (i!=m){
                l=arr[i];
                int x=m-2*i;
                if (x>0)
                    r=arr[arr.length-1-x];
                else
                    r=arr[arr.length-1];
                if (r-l<0)
                    continue;
                min=Math.min(min,r-l);
                i++;
            }
//从右边,最大值开始
            i=0;
            while (i!=m){
                r=arr[arr.length-1-i];
                int x=m-2*i;
                if (x>0)
                    l=arr[x];
                else
                    l=arr[0];
                if (r-l<0)
                    continue;
                min=Math.min(min,r-l);
                i++;
            }
        }
        System.out.println(min);
    }
}

感兴趣的也可以看看官方的题解:

【A组 —— 题目+题解】 
第五届传智杯-初赛【A组-题解】_h阿泉有个梦的博客-CSDN博客 
【B组 —— 题目+题解】 
第五届传智杯-初赛【B组-题解】_h阿泉有个梦的博客-CSDN博客 
【C组 —— 题目+题解】 
第五届传智杯-初赛【C组-题解】_h阿泉有个梦的博客-CSDN博客

         👍👍👍看完了点个赞吧👍👍👍

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下的进程控制-进程程序替换

这篇主要说一下Linux下的进程控制中最后一部分内容&#xff1a;进程程序替换。 文章目录1. 进程程序替换1.1 为什么要进程程序替换1.2 替换原理1.3 如何进行程序替换1.3.1 execl函数1.3.2 引入子进程的程序替换1.3.3 execv函数1.3.4 execlp函数和execvp函数1.3.5 如何执行其它…

Flutter自定义对话框返回相关问题汇总

Flutter自定义对话框&#xff0c;禁用系统返回按钮 - WillPopScope 使用WillPopScope即可&#xff0c;重点onWillPop方法: Future<bool> _onWillPop()>new Future.value(false); 由于要弹出dialog&#xff0c;我这里是禁掉返回按钮&#xff0c;当然也可以在这里做一下…

基于SpringBoot的二手商品交易平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;Vue、HTML 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#…

3.6.4、随机接入-CSMA/CA协议

无线局域网使用的协议 1、基本概念 对于上述无线局域网为什么 A 和 C 都检测不到对方的无线信号 因为 C 不在 A 的范围内&#xff0c;C 发送无线信号会导致 A 检测不到 C 在发送 对于上述使用广播信道的有线局域网就不会存在这样的问题 总线上某个主机发送的信号&#xff0…

JVM虚拟机字节码执行引擎——类文件和类加载之前必看

文章目录虚拟机字节码执行引擎运行时栈帧结构局部变量表&#xff08;Local Variables&#xff09;操作数栈动态链接&#xff08;Dynamic Linking&#xff09;方法返回地址附加信息方法调用解析分派虚方法和非虚方法普通调用指令&#xff1a;动态调用指令&#xff1a;动态类型语…

SpringBoot SpringBoot 原理篇 2 自定义starter 2.7 开启yml 提示功能

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇2 自定义starter2.7 开启yml 提示功能2.7.1 问题引入2.7.2 开启yml提示功能2.…

【矩阵论】正规方程——求解

5.2 正规方程 AHAxAHb为Axb的正规方程\begin{aligned} A^HAxA^Hb为Axb的正规方程 \end{aligned} AHAxAHb为Axb的正规方程​ 5.2.1 正规方程必有解 正规方程 AHAxAHbA^HAxA^HbAHAxAHb 必有解 &#xff0c;且特解为 x0Abx_0A^bx0​Ab &#xff0c;使 AHAx0AHbA^HAx_0A^HbAHAx0​…

一文熟悉 Go 的循环结构 —— for 循环

哈喽大家好&#xff0c;我是陈明勇&#xff0c;今天分享的知识是 Go 的循环结构。如果本文对你有帮助&#xff0c;不妨点个赞&#xff0c;如果你是 Go 语言初学者&#xff0c;不妨点个关注&#xff0c;一起成长一起进步&#xff0c;如果本文有错误的地方&#xff0c;欢迎指出&a…

【Spring】——10、@PostConstruct注解和@PreDestroy注解

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

OpenStack集群部署——Keystone部署(二)

三、Keyston-认证服务 3.1 Keyston介绍 Keyston介绍 补充 3.2 安装时间同步器 ----------------------------------------------------使用chrony安装------------------------------------------------- ####所有节点 #下载安装chrony yum -y install chrony #修改配置…

【心电信号】Simulink胎儿心电信号提取【含Matlab源码 1550期】

⛄一、心电信号简介 0 引言 心电信号是人类最早研究的生物信号之一, 相比其他生物信号更易于检测, 且具有直观的规律。心电图的准确分析对心脏病的及早治疗有重大的意义。人体是一个复杂精密的系统, 有许多不可抗的外界因素, 得到纯净的心电信号非常困难。可以采用神经网络算法…

MongoDB 分片集群

之前说到了主从集群&#xff0c;关于主从集群的搭建以及细节后面会再次分享&#xff0c;这次我们先初步来看看 分片集群 举个例子 例如我们有几百G甚至更多的数据&#xff0c;可是我们只有单个副本集&#xff0c;数据量这么大&#xff0c;网络 IO &#xff0c;CPU &#xff0c…

《深度学习的数学》chap1 神经网络的思想

《深度学习的数学》chap1 神经网络的思想 文章目录1-1 神经网络和深度学习神经网络用神经网络实现的人工智能“人教导机器”类型的人工智能的问题1-2 神经元工作的数学表示整理神经元的工作神经元工作的数学表示点火条件的图形表示1-3 激活函数&#xff1a;将神经元的工作一般化…

开源项目-排班管理系统,考勤管理系统

哈喽&#xff0c;大家好&#xff0c;今天给大家带来一个开源系统-排版管理系统 ​​​​​​​git上搜索可以FinalScheduler-master可以了解详情 也可以通过csdn下载​​​​​​​ 该系统主要用于人员的排班使用&#xff0c;主要用人员管理&#xff0c;排班管理&#xff0c…

Java-ForkJoinPool(线程池-工作窃取算法)

文章目录概述工作窃取算法工作窃取算法的优缺点使用 ForkJoinPool 进行分叉和合并ForkJoinPool使用RecursiveActionRecursiveTaskFork/Join 案例Demo概述 Fork 就是把一个大任务切分为若干个子任务并行地执行&#xff0c;Join 就是合并这些子任务的执行结果&#xff0c;最后得到…

《精神与爱欲》爱源于母性,且超越性别

《精神与爱欲》爱源于母性&#xff0c;且超越性别 赫尔曼黑塞&#xff08;1877-1962&#xff09;&#xff0c;作家&#xff0c;诗人&#xff0c;画家。1877年生于德国&#xff0c;1924年入籍瑞士。1946年获诺贝尔文学奖。被誉为“德国浪漫派的最后一位骑士”。 文章目录《精神与…

扩展函数和运算符重载

扩展函数和运算符重载 扩展函数 扩展函数表示在不改变某个类的源代码的情况下,仍然可以打开这个类,向该类中添加新的函数为了能够更好的理解扩展函数的功能,先来思考一个问题:给定一个字符串,这个字符串由字母,数字,特殊符号组成,我们想要统计这个字符串当中字母的个数可以这…

第十章 开源许可证

软件是一种著作&#xff0c;天然是拥有版权的。很多人会认为放在 Github 上的就是开源软件&#xff0c;既然放了源代码&#xff0c;我就可以随便使用了。其实版权法规定著作是禁止共享的&#xff0c;也就是说没有许可证的软件等于保留版权。虽然源代码公开了&#xff0c;但并不…

GUI编程--PyQt5--QLabel

文章目录QLabel 文本展示QLabel 图片展示QLCDNumberQProgressBarQErrorMessageQProgressDialogQLabel 文本展示 展示文本、富文本、图片、动画。 # 实例化 label QLabel(self) # 设置文本 label.setText("666") # 设置图片 label.setPixmap(QPixmap) label.resize…

[BUG] runtime network not ready: NetworkReady=false reason:NetworkPluginNotRead

1 背景 执行kubectl get node是发现节点是NotReady状态&#xff0c;接着执行kubectl describe node 节点名 详细查看NotReady状态原因如下&#xff1a; runtime network not ready: NetworkReadyfalse reason:NetworkPluginNotReady message:docker: network plugin is not r…