2021级C++上机考(物联网、机器人)(下)

六、记分规则

描述

有位同学本学期经历了3场小测,成绩分别为s1、s2、s3。现在老师给出了2种小测记分规则,一种以三次小测的平均分作为平时分,记为t1;一种以三次小测位于中间的成绩(即第2高成绩)作为平时分,记为t2。现在请你帮忙看看,两种记分规则下的平时分相差了多少分?(取t1、t2差值的绝对值,精确到小数点后2位)

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例由3个非负浮点数s1、s2、s3组成。(均不大于100)

输出

针对每组案例,输出一个浮点数,表示t1、t2差值的绝对值,精确到小数点后2位。

每组案例输出完要换行。

样例输入

2
60 80 90
70.5 80.5 90.5
 

样例输出

3.33

0

关键代码

*****
for (int i = 0; i < 3; i++)
{
	cin >> s[i];
	sum += s[i];
}
double t1 = sum / 3.0;
sort(s, s + 3);
printf("%.2lf\n", abs(t1 - s[1]));
*****

解释

先是算t1,将三个成绩加起来除3.0就是t1,然后对数组进行排序,那么中间的s[1]就是t2,然后用printf进行保留两位小数输出。

七、Yes or No

描述

如果一个正整数m至少满足以下条件中的任何一个,则输出Yes;如果所有条件都不满足,则输出No。

(1)m是质数

(2)m是偶数

(3)m各位上至少有两位都是数字1

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例由一个正整数m组成。(m<=1e+8)

输出

针对每组案例,如果至少满足【问题描述】中任意条件之一,则输出Yes,否则输出No。

每组案例输出完要换行。

样例输入

4
7
12
111
15
 

样例输出

Yes

Yes

Yes

No

关键代码

*****
bool isPrime(int a)//素数判断
{
	if (a < 2)
	{
		return 0;
	}
	for (int i = 2; i <= sqrt(a); i++)
	{
		if (a % i == 0)
		{
			return 0;
		}
	}
	return 1;
}
bool f(int a)
{
	int cnt = 0;
	while (a)
	{
		if (a % 10 == 1)
			cnt++;
		a /= 10;
	}
	if (cnt >= 2)
		return 1;
	return 0;
}
*****
if (isPrime(m) || (m & 1) == 0 || f(m))
	printf("Yes\n");
else
	printf("No\n");
*****

解释

首先是熟读且背诵的判断是否是素数的函数,然后下一个函数是判断输入的数字的每一位是不是等于1,是的话cnt++,如果cnt>=2,说明有两位以上的1,返回1,否则返回0,因为只要满足一个条件就行,在主函数用逻辑或运算,(m&1)是按位与运算,(m&1)==0等价于m%2==0(好像按位运算更快一点)。

八、查找-2

描述

在一个数组中查找是否有某两个元素的和等于x

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例先是两个正整数m和x,分别表示数组元素的个数,以及【问题描述】中的x。(2<=m<=100,|x|<=10000)

然后是m个整数。(绝对值均不大于10000)

输出

针对每组案例,如果数组中存在两个元素的和等于x,则输出Yes,否则输出No。

每组案例输出完要换行。

样例输入

2
4 10
1 2 3 4
4 10
2 4 6 8
 

样例输出

No

Yes

关键代码

*****
bool flag = 0;
for (int i = 0; i < m - 1; i++)
{
	for (int j = i + 1; j < m; j++)
	{
		if (num[i] + num[j] == x)
		{
			flag = 1;
			break;
		}
	}
}
if (flag)
	printf("Yes\n");
else
	printf("No\n");
*****

解释

与查找-3很相似,将输入的数字存在数组里,然后用两层循环遍历数组,如果找到了 flag=1,然后输出就行了。

九、丢失的星座

描述

已知十二星座的英文名分别为Aries、Taurus、Gemini、Cancer、Leo、Virgo、Libra、Scorpio、Sagittarius、Capricorn、Aquarius、Pisces,

现在给了其中十一个星座的英文名,找出缺少的星座。

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例由11个不同的字符串组成,表示11个不同的星座英文名。

输出

针对每组案例,输出一个英文单词,表示缺少的星座的英文名。

每组案例输出完要换行。

样例输入

1
Sagittarius Capricorn Aquarius Pisces Cancer Leo Virgo Libra Scorpio Aries Taurus
 

样例输出

Gemini

关键代码

*****
bool pd[12];
memset(pd, 0, sizeof(pd));
string xz[12] ={"Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces" };
for (int i = 1; i <= 11; i++)
{
	string s;
	cin >> s;
	for (int j = 0; j < 12; j++)
	{
		if (s == xz[j])
			pd[j] = 1;
	}
}
for (int i = 0; i < 12; i++)
{
	if (pd[i] == 0)
	{
		cout << xz[i] << endl;
		break;
	}
}
*****

解释

两个数组,xz数组是储存星座的名字,pd数组是判断星座是否输入过,每次输入一个字符串,再遍历xz数组寻找他是否出现过,再在对应的pd数组标记,最后遍历pd数组,寻找没有出现过得星座名,输出对应的xz数组的元素就行了。

十、数列-7

描述

已知一个数列的前两项a、b,从第三项开始起,每项都是前面所有项的总和,问第m项是多少?

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例由三个正整数a、b、m组成。(a<=999, b<=999, m<=10000)

输出

针对每组案例,输出一个整数,表示第m项。由于这个数可能非常大,故只要输出该数字的末三位。

每组案例输出完都要换行。

样例输入

2
1 2 3
900 830 5
 

样例输出

3

920

关键代码

*****
c = (a + b) % 1000;
for (int i = 4; i <= m; i++)
	c = (c * 2) % 1000;
if (m == 1)
	cout << a << endl;
else if (m == 2)
	cout << b << endl;
else
	cout << c << endl;
*****

解释

通过计算可以看出,从第四项开始,每一项就是前一项的两倍,因为只要千位数,所以每次计算后对1000取模就行,然后再输出对应的数字就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值