CCF计算机职业资格认证考试资料 部分题目答案 题库

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


CCF计算机职业资格认证考试资料 部分题目答案 题库_第1张图片

附:试题案例

问题描述

  输入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
 
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
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<


 

 

问题描述

试题编号:

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
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>t;
           s[t]++;
           if(t>max)
                 max=t;
      }
      for(i=1;i<=max;i++)
      {
           k[i]=i; 
      }
      for(i=1;is[k[i]])
                 {
                      t=k[j];
                      k[j]=k[i];
                      k[i]=t;            
                 }
                 if(s[k[j]]==s[k[i]]&&k[j]

问题描述

试题编号:

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
#include //printf库
#include//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;iday[isRunNian(i)][j])
                            cout<<"none"<



问题描述

试题编号:

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
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<

                           问题描述

试题编号:

201412-2

试题名称:

Z字形扫描

时间限制:

2.0s

内存限制:

256.0MB

问题描述:

问题描述

  在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:

CCF计算机职业资格认证考试资料 部分题目答案 题库_第2张图片
  对于下面的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
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<n)
			{
				j--;
				i+=2;
			}
			else
			{
				i=1;
			}			
		}
		else
		{
			while(j && i<=n)
			{
				cout<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
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

问题描述

试题编号:

201409-2

试题名称:

画图

时间限制:

1.0s

内存限制:

256.0MB

问题描述:

问题描述

  在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色。
  下图给出了一个画了两个矩形的例子。第一个矩形是(1,1) 到(4, 4),用绿色和紫色表示。第二个矩形是(2, 3)到(6, 5),用蓝色和紫色表示。图中,一共有15个单位的面积被涂上颜色,其中紫色部分被涂了两次,但在计算面积时只计算一次。在实际的涂色过程中,所有的矩形都涂成统一的颜色,图中显示不同颜色仅为说明方便。

CCF计算机职业资格认证考试资料 部分题目答案 题库_第3张图片
  给出所有要画的矩形,请问总共有多少个单位的面积被涂上颜色。

输入格式

  输入的第一行包含一个整数n,表示要画的矩形的个数。
  接下来n行,每行4个非负整数,分别表示要画的矩形的左下角的横坐标与纵坐标,以及右上角的横坐标与纵坐标。

输出格式

  输出一个整数,表示有多少个单位的面积被涂上颜色。

样例输入

2
1 1 4 4
2 3 6 5

样例输出

15

评测用例规模与约定

  1<=n<=100,0<=横坐标、纵坐标<=100。

//201409-2.cpp
#include
#include 
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<s[0][k]&& i<=s[2][k] && j>s[1][k] && j<=s[3][k])
                            flg=true;
                 }
                 if(flg)
                      s[0][0]++;            
           }
 
      }
      cout<


                                 问题描述

试题编号:

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 
using namespace std;
int main()
{
      intn,i,j,temp;
      cin>>n;
      ints[n+1],t[n];
      i=n;
      while(i)
      {
           cin>>s[i];
           i--;
      }
      for(i=1;it[temp])
                 temp=i;
      }
      cout<

问题描述

试题编号:

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
 
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<

 

问题描述

试题编号:

201312-3

试题名称:

最大的矩形

时间限制:

1.0s

内存限制:

256.0MB

问题描述:

问题描述

  在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。

CCF计算机职业资格认证考试资料 部分题目答案 题库_第4张图片


  请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。

CCF计算机职业资格认证考试资料 部分题目答案 题库_第5张图片

输入格式

  第一行包含一个整数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
 
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]


                            问题描述

试题编号:

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
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

你可能感兴趣的:(CCF计算机职业资格认证考试资料 部分题目答案 题库)