作者:杨书瑶 单位:贵州工程应用技术学院
本次比赛由大学生程序设计协会(cpa)举办,共计17道题,295分。其中5分题三道,10分题三道,15分题两道,20分题三道,25分题两道,30分题两道。
感谢戴凯林同学的验题。
1.这是一道数学题?(5分)
题目描述:在一条长80米的道路上,从头到尾每隔4米种一棵树,一共需要种多少棵树?
输入格式:本题没有输入。
输出格式:在一行输出结果。
输入样例:无
输出样例:无
//考点:道路有两边。
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"42";//(80/4+1)*2
return 0;
}
2.这是一道输出题。(5分)
题目描述:请输出”CPA\n最棒!”。
输入格式:本题没有输入。
输出格式:无。
输入样例:无
输出样例:无
//考点:转译。
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"CPA\\n最棒!";//中文感叹号
return 0;
}
3.我爱打乒乓球(10分)
题目描述:n个人淘汰赛争夺冠军,每场球乒乓球赛的胜者(无平局)或轮空者进入下一轮赛,你作为这场活动的组织者,问共需进行多少轮和多少场比赛?
输入格式:输入第一行给出一个整数n(n<=100000),为参与比赛人数。
输出格式:输出需要进行多少轮和多少场比赛。
输入样例:37
输出样例:6 36
//考点:数学。
代码1:模拟
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x=0,y=0;
cin>>n;
if(n<=0)cout<<"0 0";//该测试点为坑点
else {
while(n!=1){
x+=n/2;
if(n%2)n=n/2+1;
else n=n/2;
y++;
}cout<<y<<' '<<x;}
return 0;
}
代码2:数学思维
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x=0,y=0;
cin>>n;
if(n<=0)cout<<"0 0";
else{
for(int i=0;i<=n/2;i++)
if(pow(2,i)>=n){
y=i;break;
}cout<<y<<' '<<n-1;}
return 0;
}
4.我爱找规律(10分)
题目描述:请你找出这串数字的规律:1 2 4 5 7 8 10。
输入格式:第一行输入n(n<=1000)。
输出格式:输出第n个数(从1开始),题目保证有解。
输入样例:457
输出样例:685
//考点:隔项加3。
代码1:模拟
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n]={0},i;
a[1]=1;a[2]=2;
for(i=3;i<=n;i++)a[i]=a[i-2]+3;
cout<<a[n];
return 0;
}
代码2:数学思维。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x=0;
cin>>n;
if(n%2==1)x=n*3/2;
else x=n*3/2-1;
cout<<x;
return 0;
}
5.cpa我来了!(15分)
题目描述:给你一条字符串,统计各个字符个数并查找CPA.
输入格式: 输入一行字符串,不超过100个字符。
输出格式: 输出各个字符出现个数,如果有连续字符组成的cpa(不区分大小写)则最后输出”^_^“,没有则输出”T_T“。
输入样例1:aaacpabb
输出样例1:
a:4
b:2
c:1
p:1
^_^
输入样例2:aaacpbab
输出样例2:
a:4
b:2
c:1
p:1
T_T
//考点:map的应用、string的find函数以及大小写字符转换。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
map<char,int>a;
getline(cin,s);
for(int i=0;i<s.size();i++){
a[s[i]]++;
}
for(int i=0;i<=127;i++){
if(a[char(i)]!=0)cout<<char(i)<<':'<<a[char(i)]<<endl;
}
for(int i=0;i<s.size();i++){
if(s[i]>='A'&&s[i]<='Z'){
s[i]=tolower(s[i]);
//s[i]+=32;
//s[i]=s[i]-'A'+'a';
}
}
if(s.find("cpa")!=-1)cout<<"^_^";
else cout<<"T_T";
return 0;
}
6.520还是250?(15分)
题目描述:有这么一串数字,有的人看到的是520,有的人看到的是250,那么到底是什么?
输入格式:输入一串数字,只由0,2,5三个数字构成,该数字位数不超过500。
输出格式:第一行分别输入520和250出现的次数;第二行,如果520出现次数大于250出现的次数输出Yes,否则输出No。
输入样例1:520520520
输出样例1:
10 4
Yes
输入样例2:250250250
输出样例2:
4 10
No
//考点:三层循环。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;int i,j,k,x=0,y=0;
cin>>s;
for(i=0;i<s.size();i++){
for(j=i+1;j<s.size();j++){
for(k=j+1;k<s.size();k++){
if(s[i]=='5'&&s[j]=='2'&&s[k]=='0')x++;
if(s[i]=='2'&&s[j]=='5'&&s[k]=='0')y++;
}
}
}
cout<<x<<" "<<y<<endl;
if(x>y)cout<<"Yes";
else cout<<"No";
return 0;
}
7.出什么题目呢?
题目描述:由于作者比较懒,大家直接看样例吧!
输入格式:第一行输入n(n=1||4||9||16)。随行n行,每行给出一个数字x(x>=1&&x<=n,x不会重复),然后空格给出一个y(y>=155&&y<=185),不妨告诉你,这题考察了结构体排序和循环输出图形。
输出格式:输出等边三角形。
注:如果y相同,请按x进行升序排序。
输入样例1:
16
1 155
3 157
2 156
5 159
4 158
7 161
6 160
9 163
8 162
11 165
10 164
13 167
12 166
15 169
14 168
16 170
输出样例1:
01
02 03 04
05 06 07 08 09
10 11 12 13 14 15 16
输入样例2:
9
1 155
6 155
2 155
7 155
3 155
8 155
4 155
9 155
5 155
输出样例2:
01
02 03 04
05 06 07 08 09
//考点:结构体排序加循环输出图形。
注:直接样例1输出有5分。
蹭分代码(7分):
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,j,k=0,b,a[20],x,y;
cin>>n;
b=sqrt(n);
for(i=0;i<n;i++){
a[i]=i+1;
cin>>x>>y;
}
for(i=1;i<=b;i++){
for(j=1;j<=3*(b-i);j++)cout<<' ';
for(j=1;j<=2*i-1;j++){
if(j!=1)cout<<' ';
printf("%02d",a[k++]);
}
cout<<endl;
}
return 0;
}
满分代码:
#include<bits/stdc++.h>
using namespace std;
struct xx{
int x, y;
}s[20];
bool cmp(xx a,xx b){
if(a.y==b.y)return a.x<b.x;
return a.y<b.y;
}
int main(){
int n,i,j,k=0,b;
cin>>n;
b=sqrt(n);
for(i=0;i<n;i++)cin>>s[i].x>>s[i].y;
sort(s,s+n,cmp);
for(i=1;i<=b;i++){
for(j=1;j<=3*(b-i);j++)cout<<' ';
for(j=1;j<=2*i-1;j++){
if(j!=1)cout<<' ';
printf("%02d",s[k++].x);
}
cout<<endl;
}
return 0;
}