CCF计算机职业资格认证考试资料 部分题目答案 题库
2015-09-12 21:19
501 查看
CCF计算机职业资格认证考试资料
数据范围类型 | 字节 | 表示范围 |
signed char | 1 | -128~+127 |
unsigned char | 1 | 0~+255 |
short int | 2 | -32768~+32767 |
(long) int | 4 | -2147438648~+2141438647 |
long long long int | 8 | -9223372036854775808~+9223372036854775807 |
附:试题案例
问题描述
输入A,B。
输出A+B。
输入格式
输入包含两个整数A,B,用一个空格分隔。
输出格式
输出一个整数,表示A+B的值。
样例输入
1 2
样例输出
3
数据规模和约定
-1,000,000,000<=A,B<=1,000,000,000。
解决此题的一个C++程序示例:
//example.cpp #include<iostream> using namespace std; int main() { int a, b; cin >> a >> b; cout << a + b; return 0; }
问题描述
试题编号: | 201503-1 |
试题名称: | 图像旋转 |
时间限制: | 5.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式 输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。 接下来n行每行包含m个整数,表示输入的图像。 输出格式 输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。 样例输入 2 3 1 5 3 3 2 4 样例输出 3 4 5 2 1 3 评测用例规模与约定 1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。 |
//201503-1.cpp #include<iostream> using namespace std; int main() { int m,n; cin>>m>>n; int s[m+1][n+1],i,j; for(i=1;i<=m;i++) { for(j=1;j<=n;j++) cin>>s[i][j]; } for(i=n;i>0;i--) { for(j=1;j<=m;j++) cout<<s[j][i]<<" "; cout<<endl; } return 0; }
问题描述
试题编号: | 201503-2 |
试题名称: | 数字排序 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。 输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 5 2 3 3 1 3 4 2 5 2 3 5 样例输出 3 4 2 3 5 3 1 1 4 1 评测用例规模与约定 1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。 |
//201503-2.cpp #include<iostream> using namespace std; int main() { int n,t,i,j,max,s[1001],k[1001]; cin>>n; for(i=1;i<1001;i++) s[i]=0; for(i=0;i<n;i++) { cin>>t; s[t]++; if(t>max) max=t; } for(i=1;i<=max;i++) { k[i]=i; } for(i=1;i<max;i++) { for(j=i+1;j<=max;j++) { if(s[k[j]]>s[k[i]]) { t=k[j]; k[j]=k[i]; k[i]=t; } if(s[k[j]]==s[k[i]]&&k[j]<k[i]) { t=k[j]; k[j]=k[i]; k[i]=t; } } } for(i=1;i<=max;i++) { if(s[k[i]]!=0) cout<<k[i]<<""<<s[k[i]]<<endl; } return 0; }
问题描述
试题编号: | 201503-3 |
试题名称: | 节日 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。 现在,给你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2050),希望你输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。 提示:关于闰年的规则:年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年。例如1900年就不是闰年,而2000年是闰年。 为了方便你推算,已知1850年1月1日是星期二。 输入格式 输入包含恰好一行,有五个整数a, b, c, y1, y2。其中c=1, 2, ……, 6, 7分别表示星期一、二、……、六、日。 输出格式 对于y1和y2之间的每一个年份,包括y1和y2,按照年份从小到大的顺序输出一行。 如果该年的a月第b个星期c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。 如果该年的a月第b个星期c并不存在,则输出"none"(不包含双引号)。 样例输入 5 2 7 2014 2015 样例输出 2014/05/11 2015/05/10 评测用例规模与约定 所有评测用例都满足:1 ≤ a ≤ 12,1 ≤ b ≤ 5,1 ≤ c ≤ 7,1850 ≤ y1, y2 ≤ 2050。 |
//201503-3.cpp #include<iostream> #include <cstdio>//printf库 #include<algorithm>//max,min库 using namespace std; intday[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31} ,{0,31,29,31,30,31,30,31,31,30,31,30,31}}; /* 1 2 3 4 5 6 7 8 9 1011 12 */ bool isRunNian(int y) { if(y%400==0)return true; if(y%4==0 && y%100!=0)return true; return false; } int main() { int a,b,c,d,e,y1,y2,i,j,k; cin>>a>>b>>c>>d>>e; y1=min(d,e); y2=max(d,e); d=1; for(i=1850;i<y1;i++) { if(isRunNian(i)) d+=366; else d+=365; } c%=7; d%=7; for(i=y1;i<=y2;i++) { for(j=1;j<=12;j++) { if(j==a) { k=(b-1)*7+1; while((d+k)%7!=c) { k++; } if(k>day[isRunNian(i)][j]) cout<<"none"<<endl; else printf("%d/%02d/%02d\n",i,j,k); } d+=day[isRunNian(i)][j]; d%=7; } } return 0; }
问题描述
试题编号: | 201412-1 |
试题名称: | 门禁系统 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。 输入格式 输入的第一行包含一个整数n,表示涛涛的记录条数。 第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。 输出格式 输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。 样例输入 5 1 2 1 1 3 样例输出 1 1 2 3 1 评测用例规模与约定 1≤n≤1,000,读者的编号为不超过n的正整数。 |
//201412-1.cpp #include<iostream> using namespace std; int main() { int n,i,j; cin>>n; int s[n+1]; for(i=1;i<=n;i++) { cin>>s[i]; } for(i=1;i<=n;i++) { s[0]=0; for(j=i;j>0;j--) if(s[j]==s[i]) s[0]++; cout<<s[0]<<" "; } cout<<endl; return 0; }
问题描述
试题编号: | 201412-2 |
试题名称: | Z字形扫描 |
时间限制: | 2.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行Z字形扫描后得到长度为16的序列: 1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3 请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。 输入格式 输入的第一行包含一个整数n,表示矩阵的大小。 输入的第二行到第n+1行每行包含n个正整数,由空格分隔,表示给定的矩阵。 输出格式 输出一行,包含n×n个整数,由空格分隔,表示输入的矩阵经过Z字形扫描后的结果。 样例输入 4 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 样例输出 1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3 评测用例规模与约定 1≤n≤500,矩阵元素为不超过1000的正整数。 |
//201412-2.cpp #include<iostream> using namespace std; int main() { int n,i,j,k; cin>>n; int s[n+1][n+1]; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cin>>s[i][j]; } } i=1; j=1; bool flg=true; for(k=2;k<=2*n;k++) { if(flg) { while(i && j<=n) { cout<<s[i][j]<<" "; j++; i=k-j; } flg=false; if(j>n) { j--; i+=2; } else { i=1; } } else { while(j && i<=n) { cout<<s[i][j]<<" "; i++; j=k-i; } flg=true; if(i>n) { i--; j+=2; } else { j=1; } } } return 0; }
问题描述
试题编号: | 201409-1 |
试题名称: | 相邻数对 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。 输入格式 输入的第一行包含一个整数n,表示给定整数的个数。 第二行包含所给定的n个整数。 输出格式 输出一个整数,表示值正好相差1的数对的个数。 样例输入 6 10 2 6 3 7 8 样例输出 3 样例说明 值正好相差1的数对包括(2, 3), (6, 7), (7, 8)。 评测用例规模与约定 1<=n<=1000,给定的整数为不超过10000的非负整数。 |
//201409-1.cpp #include<iostream> using namespace std; int main() { intn,i,j,temp; cin>>n; ints[n+1]; i=n; while(i) { cin>>s[i]; i--; } for(i=1;i<n;i++) { for(j=i+1;j<=n;j++) { if(s[j]<s[i]) { temp=s[j]; s[j]=s[i]; s[i]=temp; } } //cout<<s[i]<<endl; } temp=0; for(i=1;i<n;i++) { if(s[i+1]-s[i]==1) temp++; } cout<<temp; return 0; }
问题描述
试题编号: | 201409-2 |
试题名称: | 画图 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色。 下图给出了一个画了两个矩形的例子。第一个矩形是(1,1) 到(4, 4),用绿色和紫色表示。第二个矩形是(2, 3)到(6, 5),用蓝色和紫色表示。图中,一共有15个单位的面积被涂上颜色,其中紫色部分被涂了两次,但在计算面积时只计算一次。在实际的涂色过程中,所有的矩形都涂成统一的颜色,图中显示不同颜色仅为说明方便。 给出所有要画的矩形,请问总共有多少个单位的面积被涂上颜色。 输入格式 输入的第一行包含一个整数n,表示要画的矩形的个数。 接下来n行,每行4个非负整数,分别表示要画的矩形的左下角的横坐标与纵坐标,以及右上角的横坐标与纵坐标。 输出格式 输出一个整数,表示有多少个单位的面积被涂上颜色。 样例输入 2 1 1 4 4 2 3 6 5 样例输出 15 评测用例规模与约定 1<=n<=100,0<=横坐标、纵坐标<=100。 |
//201409-2.cpp #include<iostream> #include <algorithm> using namespace std; int main() { intn,i,j,k,minX=100,maxX=0,minY=100,maxY=0; cin>>n; ints[4][n+1]; i=n; while(i) { cin>>s[0][i]>>s[1][i]>>s[2][i]>>s[3][i]; minX=min(minX,s[0][i]); minY=min(minY,s[1][i]); maxX=max(maxX,s[2][i]); maxY=max(maxY,s[3][i]); i--; } //cout<<minX<<""<<maxX<<endl<<minY<<""<<maxY<<endl; s[0][0]=0; boolflg; for(i=minX+1;i<=maxX;i++) { for(j=minY+1;j<=maxY;j++) { flg=false; for(k=1;k<=n;k++) { if(i>s[0][k]&& i<=s[2][k] && j>s[1][k] && j<=s[3][k]) flg=true; } if(flg) s[0][0]++; } } cout<<s[0][0]; return0; }
问题描述
试题编号: | 201312-1 |
试题名称: | 出现次数最多的数 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。 输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。 输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。 输出格式 输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。 样例输入 6 10 1 10 20 30 20 样例输出 10 |
//201312-1.cpp #include<iostream> using namespace std; int main() { intn,i,j,temp; cin>>n; ints[n+1],t ; i=n; while(i) { cin>>s[i]; i--; } for(i=1;i<n;i++) { for(j=i+1;j<=n;j++) { if(s[j]<s[i]) { temp=s[j]; s[j]=s[i]; s[i]=temp; } } } for(i=1;i<n;i++) { j=1; while(s[i+j]==s[i]&&i+j<=n) { j++; } t[i]=j; } temp=1; for(i=1;i<n;i++) { if(t[i]>t[temp]) temp=i; } cout<<s[temp]; return 0; }
问题描述
试题编号: | 201312-2 |
试题名称: | ISBN号码 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。 识别码的计算方法如下: 首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。 编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN号码。 输入格式 输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。 输出格式 输出一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。 样例输入 0-670-82162-4 样例输出 Right 样例输入 0-670-82162-0 样例输出 0-670-82162-4 |
//201312-2.cpp #include<iostream> using namespace std; int main() { char s[14],k; cin >> s; k=(s[0]*1+s[2]*2+s[3]*3+s[4]*4+s[6]*5+s[7]*6+s[8]*7+s[9]*8+s[10]*9-2160)%11+48; if(k==s[12] || (s[12]-k)==30 ) cout<<"Right"; else { if(k==58) k=88; s[12]=k; cout<<s; } return 0; }
问题描述
试题编号: | 201312-3 |
试题名称: | 最大的矩形 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。 请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。 输入格式 第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。 第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。 输出格式 输出一行,包含一个整数,即给定直方图内的最大矩形的面积。 样例输入 6 3 1 6 5 2 3 样例输出 10 |
//201312-3.cpp #include<iostream> using namespace std; int main() { intn,i,j,k,max=0,min; cin>>n; ints[n+1],t[n+1]; i=n; while(i) { cin>>s[i]; i--; } max=0; for(k=1;k<=n;k++) { for(i=1;i<=n+1-k;i++) { t[i]=0; min=s[i]; for(j=1;j<=k;j++) { if(s[i-1+j]<min) min=s[i-1+j]; } if(max<k*min) max=k*min; } } cout<<max; return0; }
问题描述
试题编号: | 201403-1 |
试题名称: | 相反数 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。 输入格式 第一行包含一个正整数 N。(1 ≤ N ≤ 500)。 第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。 输出格式 只输出一个整数,即这 N 个数中包含多少对相反数。 样例输入 5 1 2 3 -1 -2 样例输出 2 |
//201403-1.cpp #include<iostream> using namespace std; int main() { intn,i,j,count=0; cin>>n; ints[n+1]; i=n; while(i) { cin>>s[i]; i--; } for(i=1;i<n;i++) { for(j=i+1;j<=n;j++) { if((s[i]+s[j])==0) count++; } } cout<<count<<endl; return0; }
相关文章推荐
- iOS9适配 HTTPS
- C_数据结构_链表的链式实现
- TCP粘包,UDP不存在粘包问题
- SOCKET网络通信
- 22_01_httpd虚拟主机
- C _数据结构 _线性表的顺序存储
- 计算机三级易错点
- 数据结构之一元多项式运算操作5-(加,减,乘,化简)
- httpclient
- HTTP协议访问网络——HttpURLConnection
- 数据结构之——插入排序
- socket模型处理多个客户端
- 跳转到网络设置界面,ConnectivityManager,WebView,ScrollView
- 网络流之标号法
- Android 网络连接——WebView
- Linux网络配置
- HTTPS那个东西(一)-HTTPS原理
- 网络连接——文件下载(单线程/多线程)
- TCP协议中的三次握手和四次挥手(图解)
- linux下出现ping:unknown host www.baidu.com问题时的解决办法——ubuntu下局域网络的配置