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