2020.09全国青少年软件编程(C语言)等级考试试卷(二级)

标签:
普通文字版
2024-07-11
| 11页
| 272人阅读
| 0人下载

内容正文:

青少年软件编程(C语言)等级考试试卷(二级) 2020年9月 分数:100  题数:5 一、编程题(共5题,共100分) 1. 单词倒排   单词倒排 编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。 时间限制:10000 内存限制:65536 输入 输入为一个字符串(字符串长度至多为100)。 输出 输出为按要求排序后的字符串。 样例输入 I am a student 样例输出 student a am I #include<iostream> #include<string> using namespace std; string str; string de[100]; int main(){ getline(cin,str); int len=str.length(); int ind=0; for(int i = 0;i<len;i++){ if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z'){ de[ind]+=str[i]; }else{ ind++; de[ind]=" "; ind++; } } if(de[ind]==" "){ ind--; } for(int i=ind;i>=0;i--){ cout<<de[i]; } return 0; } 2. 细菌的繁殖与扩散   细菌的繁殖与扩散 在边长为9的正方形培养皿中,正中心位置有m个细菌。假设细菌的寿命仅一天,但每天可繁殖10个后代,而且这10个后代,有两个分布在原来的单元格中,其余的均匀分布在其四周相邻的八个单元格中。求经过n(1≤n≤4)天后,细菌在培养皿中的分布情况。 时间限制:10000 内存限制:65536 输入 输入为两个整数,第一个整数m表示中心位置细菌的个数(2 ≤ m ≤ 30),第二个整数n表示经过的天数(1 ≤ n ≤ 4)。 输出 输出九行九列整数矩阵,每行的整数之间用空格分隔。整个矩阵代表n天后细菌在培养皿上的分布情况。 样例输入 2 1 样例输出 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 0 0 0 0 0 0 2 4 2 0 0 0 0 0 0 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #include <iostream> #include <cstring> #include <cstdio> #include <stdio.h> using namespace std; int a[9][9]={}; int a1[9][9]={}; void virus(){ for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ if(a[i][j]!=0){ for(int k=-1;k<=1;k++){ for(int g=-1;g<=1;g++){ if(k==0&&g==0){ a1[i][j]+=a[i][j]*2; }else{ a1[k+i][g+j]+=a[i][j]; } } } } } } } int main(){ int n; cin>>a[4][4]>>n; for(int i=0;i<n;i++){ virus(); for(int g=0;g<9;g++){ for(int k=0;k<9;k++){ a[g][k]=a1[g][k]; a1[g][k]=0; } } } for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ cout<<a[i][j]<<" "; } cout<<endl; } return 0; } 3. 大整数加法   大整数加法 求两个不超过200位的非负整数的和。 时间限制:1000 内存限制:65536 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 输出 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入 22222222222222222222 33333333333333333333 样例输出 55555555555555555555 #include <iostream> #include <cstring> using namespace std; int main(){ char a[1001]={},b[1001]={};//输入 int a1[1001]={},b1[1001]={},c[1001]={}; //存储 cin>>a>>b; int lena=strlen(a),lenb=strlen(b); for(int i=0;i<lena;i++){ a1[i]=a[lena-1-i]-48; } for(int i=0;i<lenb;i++){ b1[i]=b[lenb-1-i]-48; } int maxlen=max(lena,lenb); int lenc=0,x=0; while(lenc<maxlen){ c[lenc]=a1[lenc]+b1[lenc]+x; x=c[lenc]/10; c[lenc]=c[lenc]%10; lenc++; } if(x){ c[lenc]=x; } else{ lenc--; } int sum=0; for(int i=0;i<=lenc;i++){ if(c[lenc-i]==0)sum++; else break; } lenc -= sum; for(int i=0;i<=lenc;i++){ cout<<c[lenc-i]; } if(lenc==-1){ cout << 0; } return 0; } 4. 合影效果   合影效果 小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)? 时间限制:1000 内存限制:65536 输入 第一行是人数n(2 <= n <= 40,且至少有1个男生和1个女生)。 后面紧跟n行,每行输入一个人的性别(男male或女female)和身高(浮点数,单位米),两个数据之间以空格分隔。 输出 n个浮点数,模拟站好队后,拍照者眼中从左到右每个人的身高。每个浮点数需保留到小数点后2位,相邻两个数之间用单个空格隔开。 样例输入 6 male 1.72 male 1.78 female 1.61 male 1.65 female 1.70 female 1.56 样例输出 1.65 1.72 1.78 1.70 1.61 1.56 #include <bits/stdc++.h> using namespace std; int n; struct stu{ bool ss; double height; void ini(){ string s; cin >> s; if(s=="male")ss=1; else ss=0; scanf("%lf",&height); } }a[41]; bool cmp(stu a1,stu b){ if(a1.ss != b.ss) return a1.ss==1; else if(a1.ss==1) return a1.height<b.height; else return b.height<a1.height; } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)a[i].ini(); sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++)printf("%.2lf ",a[i].height); return 0; } 5. 循环数   循环数 若一个n位的数字串满足下述条件,则称其是循环数(cyclic):将这个数字串视为整数(可能带有前导0),并用任意一个 1 到 n 之间(包含1和n)的整数去乘它时, 会得到一个将原数字串首尾相接后,再在某处断开而得到的新数字串所对应的整数。例如,数字 142857 是循环数,因为: 142857 *1 = 142857 142857 *2 = 285714 142857 *3 = 428571 142857 *4 = 571428 142857 *5 = 714285 142857 *6 = 857142。 请写一个程序判断给定的数是否是循环数。 注意:在此题中,输入数字串允许带前导0,且前导0不能被忽略,例如“01”是两位数字串,而“1”是一位数字串。但将数字串转化为整数做乘法运算或比较运算时,可以忽略前导0。 时间限制:10000 内存限制:65536 输入 一行,一个长度在 2 到 60 位之间的数字串。 输出 一个整数,若输入的数字串是循环数,输出1,否则输出0。 样例输入 142857 样例输出 1 #include<iostream> #include<string> using namespace std; const int sz = 60; int main(){ string str; cin >> str; int num[sz]={0},numt[sz*2]={0}; int str_length=str.size(); int lc=sz-str_length; for (int f=0;f<str_length;f++){ num[sz-1-f]=str[str_length-1-f]-'0'; numt[str_length-1-f]=str[str_length-1-f]-'0'; numt[2*str_length-1-f]=str[str_length-1-f]-'0'; } int count=1; for (int i=2;i<=str_length;i++){ int nnum[sz]={ 0 }; for (int j=0;j<str_length;j++) { nnum[sz-1-j]+=num[sz-1-j]*i; if (nnum[sz-1- j]>9){ nnum[sz-2-j]+=nnum[sz-1-j]/10; nnum[sz-1-j]%=10; } } int k = 0,count_k=0;int count_l = 0; for (;k<str_length;k++){ if(nnum[lc]==numt[k]){ int l = 0; for(;l<str_length;l++){ if(nnum[lc+l]!=numt[k+l])break; } if(l==str_length){ count_l++; break; } } } if (count_l == 1){ count++;continue; } } if (count==str_length){ cout<<1<<endl; } else{ cout<<0<<endl; } return 0; } 学科网(北京)股份有限公司 $$

资源预览图

2020.09全国青少年软件编程(C语言)等级考试试卷(二级)
1
2020.09全国青少年软件编程(C语言)等级考试试卷(二级)
2
2020.09全国青少年软件编程(C语言)等级考试试卷(二级)
3
所属专辑
相关资源
示范课
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。