内容正文:
青少年软件编程(C语言)等级考试试卷(三级)
分数:100 题数:5
一、编程题(共5题,共100分)
1. 制作蛋糕
小A擅长制作香蕉蛋糕和巧克力蛋糕。制作一个香蕉蛋糕需要2个单位的香蕉,250个单位的面粉,75个单位的糖,100个单位的黄油。制作一个巧克力蛋糕需要75个单位的可可粉,200个单位的面粉,150个单位的糖,150个单位的黄油。一个香蕉蛋糕可以卖出400元,而一个巧克力蛋糕可以卖出450元。为了避免蛋糕变质,每种蛋糕至多只能制作100个。
现已知每种原料的数量,求小A至多可以卖出多少元的蛋糕。
时间限制:1000
内存限制:65536
输入
依次输入面粉、香蕉、糖、黄油、可可粉的数量,每种原料数量均为不超过100000的整数。
输出
输出一个整数,表示最多卖出的钱数。
样例输入
4000
6
2000
500
500
样例输出
1700
试题编号:20220618_3_01
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int m,x,t,y,k;
cin>>m>>x>>t>>y>>k;
int ans=0;
int cnt1=0;
int cnt2=0;
for(int i=0;i<=100;i++)
{
int lx=(x-2*i);
int n1=(k/75);
int n2=(m-250*i)/200;
int n3=(t-75*i)/150;
int n4=(y-100*i)/150;
if(lx>=0&&n1>=0&&n2>=0&&n3>=0&&n4>=0)
{
int cnt=min(n1,min(n2,min(n3,n4)));
cnt=min(cnt,100);
if(ans<400*i+450*cnt)
{
ans=400*i+450*cnt;
cnt1=i;
cnt2=cnt;
}
}
}
展示地址:点击浏览
考生答案:(此题已作答)
考生得分:20
是否评分:已评分
评价描述:
2. 找和最接近但不超过K的两个元素
在一个长度为n(1 < n < 1000)的整数(0至1000之间)序列中,选出两个元素使得它们的和最接近但不超过K(0 <= K < 2000)。保证一定存在不超过K的两元素和。<n<1000)的整数(0至1000之间)序列中,选出两个元素使得它们的和最接近但不超过k(0<=k<2000)。保证一定存在不超过k的两元素和。<n<1000)的整数(0至1000之间)序列中,选出两个元素使得它们的和最接近但不超过k(0<=k<2000)。保证一定存在不超过k的两元素和。
<n<1000)的整数(0至1000之间)序列中,选出两个元素使得它们的和最接近但不超过k(0<=k<2000)。保证一定存在不超过k的两元素和。
时间限制:1000
内存限制:65536
输入
第一行输入一个整数n 第二行输入一个整数K 第三行输入序列,用空格分开
输出
最接近但不超过K的和
样例输入
4
7
1 2 2 8
样例输出
4
试题编号:20220618_3_02
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int a[10005];
int main(){
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int l=0,r=n-1;
int ans=a[0]+a[1];
while(l<r){
int sum=a[l]+a[r];
if(sum<=k){
if(k-sum<k-ans) ans=sum;
}
if(sum==k) {
cout<<k<<endl;
return 0;
}
else if(sum<k) l++;
else r--;
}
cout<<ans<<endl;
}
展示地址:点击浏览
考生答案:(此题已作答)
考生得分:20
是否评分:已评分
评价描述:
3. 数根
在一个长度为n(1 < n < 1000)的整数(0至1000之间)序列中,选出两个元素使得它们的和最接近但不超过K(0 <= K < 2000)。保证一定存在不超过K的两元素和。<n<1000)的整数(0至1000之间)序列中,选出两个元素使得它们的和最接近但不超过k(0<=k<2000)。保证一定存在不超过k的两元素和。<n<1000)的整数(0至1000之间)序列中,选出两个元素使得它们的和最接近但不超过k(0<=k<2000)。保证一定存在不超过k的两元素和。
<n<1000)的整数(0至1000之间)序列中,选出两个元素使得它们的和最接近但不超过k(0<=k<2000)。保证一定存在不超过k的两元素和。
时间限制:1000
内存限制:65536
输入
第一行输入一个整数n 第二行输入一个整数K 第三行输入序列,用空格分开
输出
最接近但不超过K的和
样例输入
4
7
1 2 2 8
样例输出
4
试题编号:20220618_3_03
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int a[10005];
int main(){
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int l=0,r=n-1;
int ans=a[0]+a[1];
while(l<r){
int sum=a[l]+a[r];
if(sum<=k){
if(k-sum<k-ans) ans=sum;
}
if(sum==k) {
cout<<k<<endl;
return 0;
}
else if(sum<k) l++;
else r--;
}
cout<<ans<<endl;
}
展示地址:点击浏览
考生答案:(此题已作答)
考生得分:20
是否评分:已评分
评价描述:
4. 迷信的病人
医院为了方便对患者进行建档和管理,引入了9位整数ID号来标识每个病人。最近医院入住了一个迷信的病人,他认为ID号的好坏直接决定了自己的命运。他对ID号x有如下要求:
(1)x的前三位数构成的整数是素数
(2)x的后三位数构成的整数是平方数(所谓平方数,是指它是某一个正整数的平方,e.g. 1,4,9,16...)
(3)x中不包含"13"
为了避免不必要的医患矛盾,医院须尽量满足他的需求。现给定正整数区间[m,n],请你判断存在几个满足病人需求的ID号。
时间限制:1000
内存限制:65536
输入
两个正整数m,n,以空格隔开。(999999999>=n>=m>=111111111)
输出
一个整数(满足要求的ID的个数)。
样例输入
157689476 157689687
样例输出
5
提示
存在5个满足要求的ID:157689484,157689529,157689576,157689625,157689676
试题编号:20220618_3_04
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
展示地址:点击浏览
考生答案:
考生得分:0
是否评分:已评分
评价描述:
5. 算24
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。 这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。 比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。
时间限制:6000
内存限制:65536
输入
输入数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。最后一组测试数据中包括4个0,表示输入的结束,这组数据不用处理。
输出
对于每一组测试数据,输出一行,如果可以得到24,输出“YES”;否则,输出“NO”。
样例输入
5 5 5 1
1 1 4 2
0 0 0 0
样例输出
YES
NO
试题编号:20220618_3_05
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
展示地址:点击浏览
考生答案:
考生得分:0
是否评分:已评分
评价描述:
学科网(北京)股份有限公司
$$