CCF程序员考试真题及答案.docx

上传人:b****2 文档编号:2136626 上传时间:2022-10-27 格式:DOCX 页数:69 大小:204.44KB
下载 相关 举报
CCF程序员考试真题及答案.docx_第1页
第1页 / 共69页
CCF程序员考试真题及答案.docx_第2页
第2页 / 共69页
CCF程序员考试真题及答案.docx_第3页
第3页 / 共69页
CCF程序员考试真题及答案.docx_第4页
第4页 / 共69页
CCF程序员考试真题及答案.docx_第5页
第5页 / 共69页
点击查看更多>>
下载资源
资源描述

CCF程序员考试真题及答案.docx

《CCF程序员考试真题及答案.docx》由会员分享,可在线阅读,更多相关《CCF程序员考试真题及答案.docx(69页珍藏版)》请在冰豆网上搜索。

CCF程序员考试真题及答案.docx

CCF程序员考试真题及答案

201312-1中间数

试题编号:

201612-1

试题名称:

中间数

时间限制:

1.0s

内存限制:

256.0MB

问题描述:

问题描述

  在一个整数序列a1,a2,…,an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。

在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。

  给定一个整数序列,请找出这个整数序列的中间数的值。

输入格式

  输入的第一行包含了一个整数n,表示整数序列中数的个数。

  第二行包含n个正整数,依次表示a1,a2,…,an。

输出格式

  如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。

样例输入

6

265635

样例输出

5

样例说明

  比5小的数有2个,比5大的数也有2个。

样例输入

4

3467

样例输出

-1

样例说明

  在序列中的4个数都不满足中间数的定义。

样例输入

5

34667

样例输出

-1

样例说明

  在序列中的5个数都不满足中间数的定义。

评测用例规模与约定

  对于所有评测用例,1≤n≤1000,1≤ai ≤1000。

问题链接:

CCF201612试题。

问题描述:

首先输入正整数n,接着输入n个正整数,如果存在一个数,比该数大或比该数小的数则输出该数,如果不存在则输出-1。

问题分析:

这个问题可以用排序来解决,这是基础。

可以证明,如果存在答案则必定所有数排序后的中间位置。

排序方法上有以下几种:

1.对n个数进行排序,找出中间那个数,然后将中间那个数的左右与其相等的数去掉,看左右剩下的数个数是否相等,如果相等则中间那个数就是答案,否在输出-1。

2.使用分治法,按照快速排序的基本思想来处理,只需要将中间的那个数找到即可。

3.使用STL的map类对数据进行排序。

这种方法在同值的数据比较多时候,存储上会节省一些。

4.按照桶排序的基本思想,将相同的值放入同一个桶中,即对同值数据进行计数,然后再计算中间值。

程序说明:

本程序采用上述的第3种方法实现,是一个典型的应用STL容器类的实例。

参见:

CCF201612-1中间数(解法二)(100分)

CCF201612-1中间数(解法三)(100分)

提交后得100分的C++语言程序如下:

[cpp] viewplain copy

 

1./* CCF201612-1 中间数 */  

2.  

3.#include   

4.#include   

5.  

6.using namespace std;  

7.  

8.int main()  

9.{  

10.    map m;  

11.    int n, v;  

12.  

13.    // 输入数据,构建Map  

14.    cin >> n;  

15.    for(int i=0; i

16.        cin >> v;  

17.        m[v]++;  

18.    }  

19.  

20.    // 找出中间数  

21.    int ans, mid=(n+1)/2, count=0, left;  

22.    for(map:

:

iterator it=m.begin(); it!

=m.end(); it++)  

23.        if(count + it->second >= mid) {  

24.            left = count;  

25.            count = 0;  

26.            ans = it->first;  

27.        } else  

28.            count += it->second;  

29.  

30.    // 输出结果  

31.    if(left == count)  

32.        cout << ans << endl;  

33.    else  

34.        cout << -1 << endl;  

35.  

36.    return 0;  

37.}  

201612-2工资计算问题描述

  小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。

假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算:

  1)个人所得税起征点为3500元,若S不超过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S-3500元;

  2)A中不超过1500元的部分,税率3%;

  3)A中超过1500元未超过4500元的部分,税率10%;

  4)A中超过4500元未超过9000元的部分,税率20%;

  5)A中超过9000元未超过35000元的部分,税率25%;

  6)A中超过35000元未超过55000元的部分,税率30%;

  7)A中超过55000元未超过80000元的部分,税率35%;

  8)A中超过80000元的部分,税率45%;

  例如,如果小明的税前工资为10000元,则A=10000-3500=6500元,其中不超过1500元部分应缴税1500×3%=45元,超过1500元不超过4500元部分应缴税(4500-1500)×10%=300元,超过4500元部分应缴税(6500-4500)×20%=400元。

总共缴税745元,税后所得为9255元。

  已知小明这个月税后所得为T元,请问他的税前工资S是多少元。

输入格式

  输入的第一行包含一个整数T,表示小明的税后所得。

所有评测数据保证小明的税前工资为一个整百的数。

输出格式

  输出一个整数S,表示小明的税前工资。

样例输入

  9255

样例输出

  10000

评测用例规模与约定

  对于所有评测用例,1≤T≤100000。

解题说明

  税前到税后其实就是个分段函数,于是我就干脆先把函数算出来得了,感觉手算比写程序简单.如下图所示.这样写程序就轻而易举了.

  

1.#include

2.

3.usingnamespacestd;

4.

5.intS[]={0,3500,5000,8000,12500,38500,58500,83500,999999};

6.intT[]={0,3500,4955,7655,11255,30755,44755,61005,999999};

7.floatf[]={1,0.97,0.9,0.8,0.75,0.7,0.65,0.55,0};

8.

9.intmain(void){

10.intN,i,res;

11.cin>>N;

12.for(i=0;i<9;i++){

13.if(T[i]>=N){

14.break;

15.}

16.}

17.res=S[i-1]+(N-T[i-1])/f[i-1];

18.cout<

19.

20.return0;

21.}

201612-3权限查询

试题编号:

201612-3

试题名称:

权限查询

时间限制:

1.0s

内存限制:

256.0MB

问题描述:

问题描述

  授权(authorization)是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个模块的操作权限。

  本题中的授权机制是这样设计的:

每位用户具有若干角色,每种角色具有若干权限。

例如,用户david具有manager角色,manager角色有crm:

2权限,则用户david具有crm:

2权限,也就是crm类权限的第2等级的权限。

  具体地,用户名和角色名称都是由小写字母组成的字符串,长度不超过32。

权限分为分等级权限和不分等级权限两大类。

分等级权限由权限类名和权限等级构成,中间用冒号“:

”分隔。

其中权限类名也是由小写字母组成的字符串,长度不超过32。

权限等级是一位数字,从0到9,数字越大表示权限等级越高。

系统规定如果用户具有某类某一等级的权限,那么他也将自动具有该类更低等级的权限。

例如在上面的例子中,除crm:

2外,用户david也具有crm:

1和crm:

0权限。

不分等级权限在描述权限时只有权限类名,没有权限等级(也没有用于分隔的冒号)。

  给出系统中用户、角色和权限的描述信息,你的程序需要回答多个关于用户和权限的查询。

查询可分为以下几类:

  *不分等级权限的查询:

如果权限本身是不分等级的,则查询时不指定等级,返回是否具有该权限;

  *分等级权限的带等级查询:

如果权限本身分等级,查询也带等级,则返回是否具有该类的该等级权限;

  *分等级权限的不带等级查询:

如果权限本身分等级,查询不带等级,则返回具有该类权限的等级;如果不具有该类的任何等级权限,则返回“否”。

输入格式

  输入第一行是一个正整数p,表示不同的权限类别的数量。

紧接着的p行被称为P段,每行一个字符串,描述各个权限。

对于分等级权限,格式为:

,其中是权限类名,是该类权限的最高等级。

对于不分等级权限,字符串只包含权限类名。

  接下来一行是一个正整数r,表示不同的角色数量。

紧接着的r行被称为R段,每行描述一种角色,格式为

  ...

  其中是角色名称,表示该角色具有多少种权限。

后面个字符串描述该角色具有的权限,格式同P段。

  接下来一行是一个正整数u,表示用户数量。

紧接着的u行被称为U段,每行描述一个用户,格式为

  ...

  其中是用户名,表示该用户具有多少种角色。

后面个字符串描述该用户具有的角色。

  接下来一行是一个正整数q,表示权限查询的数量。

紧接着的q行被称为Q段,每行描述一个授权查询,格式为,表示查询用户是否具有权限。

如果查询的权限是分等级权限,则查询中的可指定等级,表示查询该用户是否具有该等级的权限;也可以不指定等级,表示查询该用户具有该权限的等级。

对于不分等级权限,只能查询该用户是否具有该权限,查询中不能指定等级。

输出格式

  输出共q行,每行为false、true,或者一个数字。

false表示相应的用户不具有相应的权限,true表示相应的用户具有相应的权限。

对于分等级权限的不带等级查询,如果具有权限,则结果是一个数字,表示该用户具有该权限的(最高)等级。

如果用户不存在,或者查询的权限没有定义,则应该返回false。

样例输入

3

crm:

2

git:

3

game

4

hr1crm:

2

it3crm:

1git:

1game

dev2git:

3game

qa1git:

2

3

alice1hr

bob2itqa

charlie1d

展开阅读全文
相关搜索

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1