没有合适的资源?快使用搜索试试~ 我知道了~
2022常州市程序设计小能手比赛试题
需积分: 5 6 下载量 55 浏览量
2023-05-06
15:39:07
上传
评论
收藏 349KB PDF 举报
温馨提示
试读
11页
2022常州市程序设计小能手比赛试题
资源推荐
资源详情
资源评论
1
2022 年常州市“程序设计小能手”比赛说明
文件保存的位置:在不保护硬盘分区(由监考老师当场告知)
文件夹命名:建立以自己准考证号为名的文件夹,例如:某学生的准考证号
为 800,那么他的文件夹名就是 800,本次比赛编写的程序必须存放在这个
文件夹中。
文件名的要求:在每题标题后的括号中有文件名,如:第一题 最大公约数
(
gcd.cpp
)
,
该题编好的程序保存时命名为
gcd
。文件名错误不得分。
活动结束前将你编的所有程序(扩展名为 cpp)放到该文件夹中,然后右击该
文件夹在弹出菜单中选择“添加到 800.rar”,压缩后等待工作人员上传到
教师机。
一般说来前面的题要比后面的容易,后面的题目虽然得到满分很难,然而拿
一部分分数并不难。请合理分配你的时间,先保证程序的正确性,超时等问
题都是次要的,计算机的运行速度往往比你想象的要快得多。如果某题不太
会做你可以针对小数据或特殊数据编程争取拿部分分数,哪怕手算一个结果
输出也行,比赛总是有难度的,不能像平时学校里的小测验那样老想着拿满
分,从往年的经验来看你能得到总分的
1/3
就相当好了。
所有测试点时限都是 1 秒,所有程序运行时内存都不能超过 512MB,大约
可以存储六千万个 long long 类型的整数。
输出时行首和行尾都不要有多余的空格,也不要有多余的空行,相邻两项输
出之间严格用一个空格隔开,一行输出结束时一定要换行。
所有题目均使用标准输入输出,即从键盘输入数据,结果输出到屏幕,请认
真阅读范例,你的程序请严格按范例程序的格式编写。
题目中用到的“∧”符号表示乘方运算,如 2^3=2×2×2=8,10^6=1000000
【范例】
最大公约数和最小公倍数(gcdlcm.cpp)
问题描述
最大公约数(Greatest Common Divisor,简写为 GCD):如果有一个自然数 a 能被自然数
b 整除(也称 b 能整除 a,记作 b|a),则称 a 为 b 的倍数,b 为 a 的约数。两个自然数公共的
约数,叫做这两个自然数的公约数。所有公约数中最大的一个,称为这两个自然数的最大公
约数。最小公倍数(Least Common Multiple,缩写 LCM):对于两个自然数来说,最小公倍数
是指这两个数公共的倍数中最小的一个。例如: 在 12 和 16 中,4 就是 12 和 16 的最大公
2
约数。12 和 16 的最小公倍数是 48。
早在公元前 300 年左右,欧几里德就在他的著作《几何原本》中给出了求最小公倍数的
高效方法——辗转相除法。辗转相除法使用到的原理很聪明也很简单,假设用 GCD(x, y)表
示两个自然数 x 和 y 的最大公约数,取 k = x / y,b = x % y,则 x = k * y + b,如果一个自然
数能够同时整除 x 和 y,则必能同时整除 y 和 b;而能够同时整除 y 和 b 的自然数也必能同
时整除 x 和 y,即 x 和 y 的公约数与 y 和 b 的公约数是相同的,其最大公约数当然也相同,
则当 y != 0 时有 GCD(x, y)= GCD(y, x % y),如此便可把原问题转化为求两个更小的自然数
的最大公约数,直到其中一个数为 0,剩下的另外一个数就是两者的最大公约数。以求 288
和 123 的最大公约数为例,操作如下: 288 % 123=42 123 % 42=39 42 % 39=3 39 %
3=0 所以 3 就是 288 和 123 的最大公约数。
计算最小公倍数时,通常会借助最大公约数来辅助计算。可以证明两个自然数的乘积等
于它们的最大公约数和最小公倍数的乘积,即 a×b=GCD(a,b)×LCM(a,b)。如 12×16=192=
GCD(12,16) ×LCM(12,16)=4×48。
编一个程序对于输入的两个自然数 a 和 b,求它们的最大公约数和最小公倍数。
输入格式
输入数据仅有一行包含两个用空格隔开的自然数 a 和 b,范围不超过 long long。
输出格式
输出数据仅有一行包含两个自然数,表示要求的最大公约数和最小公倍数。两数之间严
格用一个空格隔开,行末没有多余的空格。
样例输入
12 16
样例输出
4 48
以下是 C++源程序,存盘文件名为 gcdlcm.cpp
#include <bits/stdc++.h>
using namespace std;
int main(){
long long m,n,a,b,r;
cin>>m>>n;
a = m;
b = n;
while ( b != 0 ){
r = a % b;
a = b;
b = r;
}
cout<<a<<" "<<m*n/a<<endl;
return 0;
}
3
阶梯电价
( a.cpp)
本题分值为
60
分
问题描述
碳中和是指国家、企业、产品、活动或个人在一定时间内直接或间接产生的二氧化碳或
温室气体排放总量,通过植树造林、节能减排等形式,以抵消自身产生的二氧化碳或温室气
体排放量,实现正负抵消,达到相对“零排放”。
龙城电力公司为了配合碳中和推出了阶梯电价的标准。以下为阶梯电价的计费说明:阶
梯电价的实施周期为一年,在本年度中用电量在 2760 度以内的,算作第一阶梯,这是基本
保障的用电量,每度电按 0.52 元计价;从 2761 度至 4800 度算作第二阶梯,每度电按 0.57
元计价,电价与发电平均成本持平;第三阶梯从 4801 度开始计费,每度电按 0.82 元计价,
以促进节约用电。每过一年电表读数归零,每个月的电费视用电情况收取,每度电的价格取
决于这度电属于哪个阶梯。
小 X 有个每月底查看自家电表的习惯,并记录下每个月电表的读数。现在小 X 知道了
上个月底的电表读数 u 和当前这个月底的电表读数 v(其中 u≤v,且 u 和 v 都是大于等于 0
的整数即非负整数),小 X 想知道按照阶梯电价的标准,当前这个月的电费是多少,你能写
一个程序帮他计算一下吗?
输入格式
一行用空格隔开的两个整数 u 和 v,分别表示上个月底的电表读数和当前这个月底的电
表读数。
输出格式
一行一个实数,表示当前这个月的电费,要求输出时保留 2 位小数。
样例输入
2700 5000
样例输出
1358.00
样例解释
小X家上个月底的电表读数为2700,表示到上个月结束为止已经用掉了本年度第一阶梯
的2700度电,这个月先用掉了第一阶梯余下的60度电,然后开始进入第二阶梯,并将第二阶
梯的额度共计2040度电全部用完,紧接着继续用掉了第三阶梯的200度电,所以这个月的总
电费为:60*0.52+2040*0.57+200*0.82=1358.00元。
数据规模与约定
测试点编号
u
v
1
u≤2760
2760<v≤4800
2
u≤2760
v>4800
剩余10页未读,继续阅读
资源评论
seamoth
- 粉丝: 3
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功