2022年6月中国电子学会C语言编程考试3级试题

目录

1.【制作蛋糕】(第一题)

【题目描述】

【输入】

【输出】

【输入样例】

【输出样例】

2.【找和最接近但不超过K的两个元素(第二题)】

【题目描述】

【输入】

【输出】

【输入样例】

【输出样例】

3.【数根】

【题目描述】

【输入】

【输出】

【输入样例】

【输出样例】

4.【迷信的病人】★★★★★

【题目描述】

【输入】

【输出】

【输入样例】

【输出样例】

【样例解释】​​​​​​​


​​​​​​​

1.【制作蛋糕】(第一题)

【题目描述】

小A擅长制作香蕉蛋糕和巧克力蛋糕。制作一个香蕉蛋糕需要2个单位的香蕉,250个单位的面粉,75个单位的糖,100个单位的黄油。制作一个巧克力蛋糕需要75个单位的可可粉,200个单位的面粉,150个单位的糖,150个单位的黄油。一个香蕉蛋糕可以卖出400元,而一个巧克力蛋糕可以卖出450元。为了避免蛋糕变质,每种蛋糕至多只能制作100个。

现已知每种原料的数量,求小A至多可以卖出多少元的蛋糕。

【输入】

依次输入面粉、香蕉、糖、黄油、可可粉的数量,每种原料数量均为不超过100000的整数。

【输出】

输出一个整数,表示最多卖出的钱数。

【输入样例】

4000
6
2000
500
500

【输出样例】

1700
#include<bits/stdc++.h>//枚举
using namespace std;
int main()
{
	int mf,xj,t,hy,kkf,xjcake=0,kkcake=0,msum=0,sum=0;
	cin>>mf>>xj>>t>>hy>>kkf;
	for(int i=0;i<=xj/2;i++)//最多的香蕉蛋糕数量
		for(int j=0;j<=kkf/75;j++)//最多的巧克力蛋糕数量
        {
			if((i*250+j*200)<=mf&&(i*75+j*150)<=t&&(i*100+j*150)<=hy&&i<=100&&j<=100)//是否符合原料要求
            {
				sum=i*400+j*450;//money
				if(sum>msum)
					msum=sum;//打擂台				
			}
		}
	cout<<msum;
	return 0;
}

2.【找和最接近但不超过K的两个元素(第二题)】

【题目描述】

在一个长度为n(1 < n < 1000)的整数(0至1000之间)序列中,选出两个元素使得它们的和最接近但不超过K(0 <= K < 2000)。保证一定存在不超过K的两元素和。

【输入】

第一行输入一个整数n 第二行输入一个整数K 第三行输入序列,用空格分开

【输出】

最接近但不超过K的和

【输入样例】

4
7
1 2 2 8

【输出样例】

4

#include<bits/stdc++.h>//枚举
using namespace std;
int main()
{
	int n,k,sum,msum=0;//msum表示最接近但不超过K的和
	int s[1002];//存元素
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
		scanf("%d",&s[i]);//输入
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		{
			if(i==j)//下角标不可以一样
				continue; 
			sum=s[i]+s[j];//现在的和
			if(sum<=k/*不超过K*/&&sum>msum/*比最大值大*/)//合起来就是判断现在的和是不是最接近但不超过K的和
				msum=sum;//最大值赋值给他
		}
	printf("%d",msum);//输出最接近但不超过K的和
	return 0;
}

3.【数根】

【题目描述】

数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。 比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数根。

【输入】

一个正整数(小于101000)。

【输出】

一个数字,即输入数字的数根。

【输入样例】

24

【输出样例】

6

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;//用来存储 
	cin>>n;
	int w;//用来计算 
	while(n>=10)//不为一位数 
	{
		w=n;//n的值赋值给w,让w计算 
		n=0;
		while(w!=0)//数位分离 
		{
			n+=w%10;//加上每一位的数字 
			w/=10;
		}
	}
	cout<<n;//输出一位数 
	return 0;
}

4.【迷信的病人】★★★★★

【题目描述】

医院为了方便对患者进行建档和管理,引入了9位整数ID号来标识每个病人。最近医院入住了一个迷信的病人,他认为ID号的好坏直接决定了自己的命运。他对ID号x有如下要求:
(1)x的前三位数构成的整数是素数
(2)x的后三位数构成的整数是平方数(所谓平方数,是指它是某一个正整数的平方,e.g. 1,4,9,16...)
(3)x中不包含"13"
为了避免不必要的医患矛盾,医院须尽量满足他的需求。现给定正整数区间[m,n],请你判断存在几个满足病人需求的ID号。

【输入】

两个正整数m,n,以空格隔开。(999999999>=n>=m>=111111111)

【输出】

一个整数(满足要求的ID的个数)。

【输入样例】

157689476 157689687

【输出样例】

5

【样例解释】

        存在5个满足要求的ID:157689484,157689529,157689576,157689625,157689676

#include<bits/stdc++.h>//这一道题的思路为把九位数分为三个部分,先判断前三位是不是素数,在判断后三位是不是平方数,最后判断有没有13.
using namespace std;
bool zs(int n)//判断n是不是素数
{
	if(n<2) return 0;
	for(int i=2;i*i<=n;i++)
		if(n%i==0)
			return 0;
	return 1; 
}
bool check(int n)//判断n是不是含有13
{
	int a=0,b;
	while(n!=0)
	{
		n/=10;
		if(n%100==13)
			return 0;
	}
	return 1;
}
int main()
{
	int m,n,i,cnt=0;
	int a[1010],aa=0,b[1010],bb=0;//aa为素数个数,bb为平方数个数
	scanf("%d%d",&m,&n);
	for(i=101;i<1000;i++)
	{
		if(zs(i)==1)
		{
			a[aa]=i;//如果是,存在a数组里
			aa++;
		}
	}
	bb=31;
	for(int i=1;i<=31;i++)
		b[i]=i*i;
	int shu=0;
	for(i=0;i<aa;i++)//枚举素数
	{
		for(int j=0;j<1000;j++)//枚举中间数
		{
			for(int k=1;k<=bb;k++)//枚举平方数
			{
				shu=a[i]*1000000+j*1000+b[k];//把这个数算出来
				if(shu>=m&&shu<=n&&check(shu))//如果是好的ID号
					cnt++;计数器加1
			}
		}
	}
	printf("%d",cnt);//输出个数
	return 0;
}

以上就是2022年6月中国电子学会C语言编程考试3级试题

请点赞+关注

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值