概述
六、记分规则
描述
有位同学本学期经历了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("%.2lfn", 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("Yesn");
else
printf("Non");
*****
解释
首先是熟读且背诵的判断是否是素数的函数,然后下一个函数是判断输入的数字的每一位是不是等于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("Yesn");
else
printf("Non");
*****
解释
与查找-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取模就行,然后再输出对应的数字就好了。
最后
以上就是健壮小虾米为你收集整理的2021级C++上机考(物联网、机器人)(下)的全部内容,希望文章能够帮你解决2021级C++上机考(物联网、机器人)(下)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复