编程题
第一题(难度系数2,15 个计分点)
题目编号:22112701CB01 知识点:运算符
编程实现:切割蛋糕
题目描述:
有一块矩形蛋糕,小明从蛋糕的正上方横向和纵向各切N刀(1<N<100),每刀互不重合。计算出蛋糕被切割成了几块。
例如:N = 2,蛋糕被切割成9块。
输入描述:输入一个正整数N(1 <N<100)< span>
</N<100)<>,表示蛋糕被横向和纵向各切割的刀数
输出描述:输出一个整数,表示蛋糕最后被切割成了几块
样例输入:2
样例输出:9
评分标准:
3分:能正确输出第一组数据;
3分:能正确输出第二组数据;
3分:能正确输出第三组数据;
3分:能正确输出第四组数据;
3分:能正确输出第五组数据。
测试用例:
|
输入 |
1 |
5 |
21 |
68 |
98 |
|
输出 |
4 |
36 |
484 |
4761 |
9801 |
第二题(难度系数 3,18 个计分点)
题目编号:22112701CB02 知识点:判断
编程实现:拼写单词
题目描述:
四种水果的英文单词,分别为Apple、Banana、Orange、Pear。老师通过提示每个单词的首字母,让同学将对应的单词拼写下来。
请编写程序:
当输入的大写字母为“A”时,则输出“Apple”;
当输入的大写字母为“B”时,则输出“Banana”;
当输入的大写字母为“O”时,则输出“Orange”;
当输入的大写字母为“P”时,则输出“Pear”。
输入描述:输入A、B、O、P中任意一个大写字母
输出描述:输出一个字符串,表示大写字母对应的英文单词(单词首字母大写)
样例输入:A
样例输出:Apple
评分标准:
4分:能正确输出第一组数据;
4分:能正确输出第二组数据;
5分:能正确输出第三组数据;
5分:能正确输出第四组数据。
测试用例:
|
输入 |
B |
O |
P |
A |
|
输出 |
Banana |
Orange |
Pear |
Apple |
第三题(难度系数 3,20 个计分点)
题目编号:22112701CB03 知识点:循环 判断
编程实现:业务办理时间
题目描述:
某服务大厅同时开放3个窗口为客户办理业务,窗口编号分别为1、2、3。
现有N(2≤N≤50)位客户需要办理业务,客户编号为1~N,作为办理业务的先后顺序。
起初三个窗口为空闲状态,空闲的窗口会按照客户编号顺序呼叫下一位客户。如果多个窗口同时为空闲状态,按照窗口编号顺序呼叫(1优先于2,2优先于3)。
现给出每位客户办理业务的时间(单位:分钟),请计算出N位客户全部办理完业务后,哪一个窗口合计办理业务的时间最短,并输出最短时间。
例如:N=7,7位客户编号分别为1、2、3、4、5、6、7,客户办理业务时间分别为3、5、2、4、7、1、6,(如下图):
初始客户编号为1、2、3的客户分别在1、2、3窗口同时办理业务;
窗口3用时2分钟办理完3号客户的业务,变为空闲状态,并按顺序呼叫4号客户,用时4分钟;
窗口1用时3分钟办理完1号客户的业务,变为空闲状态,并按顺序呼叫5号客户,用时7分钟;
窗口2用时5分钟办理完2号客户的业务,变为空闲状态,并按顺序呼叫6号客户,用时1分钟;
6分钟后,窗口2和3同时变为空闲状态,窗口2呼叫7号客户,用时6分钟。
全部客户办理完业务后,三个窗口总用时分别为10分钟、12分钟、6分钟,用时最短的是窗口3,最短时间为6分钟。
输入描述:
第一行输入一个正整数N(2≤N≤50),表示办理业务的客户数
第二行输入N个正整数(1≤正整数≤50),依次表示每位客户办理业务的时间,正整数之间以一个空格隔开
输出描述:
输出一个整数,表示客户全部办理完业务,用时最短的窗口所用时间
样例输入:
7
3 5 2 4 7 1 6
样例输出:
6
评分标准:
3分:能正确输出第一组数据;
3分:能正确输出第二组数据;
3分:能正确输出第三组数据;
3分:能正确输出第四组数据;
3分:能正确输出第五组数据;
5分:能正确输出第六组数据。
测试用例:
|
输入 |
6 3 5 2 2 7 1 |
7 9 5 15 17 11 13 14 |
10 6 5 9 3 1 18 15 11 14 12 |
12 13 8 5 2 18 4 14 7 17 20 16 12 |
|
输出 |
5 |
22 |
25 |
42 |
|
输入 |
12 13 17 6 20 1 11 5 8 15 12 2 19 |
22 12 34 22 12 3 5 7 27 38 2 9 11 23 45 23 12 19 20 24 1 2 43 |
||
|
输出 |
38 |
113 |
||
第四题(难度系数4,25个计分点)
题目编号:22112701CB04 知识点:递归 递推 搜索
编程实现:找路线
题目描述:
现有22名小朋友,依次编号1到22,22名小朋友分别按照下图的位置站好。
每名小朋友只能按照图中箭头指向的方向移动。给出两名小朋友的编号N和M(1≤N<M≤22),请你找出从编号N到编号M共有多少条不同的路线。
例如:N=3,M=7,从编号3的位置到编号7的位置共有5条路线,分别为:(3->5->7),(3->5->6->7),(3->4->5->7),(3->4->5->6->7),(3->4>6->7)。
输入描述:输入两个正整数N和M(1≤N<M≤22),分别表示两名小朋友的编号,之间以一个空格隔开
输出描述:输出一个整数,表示从编号N到编号M共有多少条不同的路线
样例输入:
3 7
样例输出:
5
评分标准:
4分:能正确输出第一组数据;
4分:能正确输出第二组数据;
4分:能正确输出第三组数据;
4分:能正确输出第四组数据;
4分:能正确输出第五组数据;
5分:能正确输出第六组数据。
测试用例:
|
输入 |
1 2 |
3 6 |
7 17 |
12 20 |
6 18 |
1 22 |
|
输出 |
1 |
3 |
89 |
34 |
233 |
17711 |
第五题(难度系数 5,30 个计分点)
题目编号:22112701CB05 知识点:动态规划
编程实现:最大乘积
题目描述:
小明有N(4≤N≤60)个玻璃球,他想将N个玻璃球拆分成若干份(份数≥2),且每份中的数量互不相等。
小明想知道如何拆分可以使每份玻璃球数量的乘积最大。请你编写程序帮助小明计算出最大乘积是多少。
例如:N = 5,
5个玻璃球有2种符合条件的拆分方法:(4,1)、(3,2);
其中,能得到最大乘积的拆分方法为(3,2),最大乘积为6(6=3*2)。
输入描述:输入一个正整数N(4≤N≤60),表示玻璃球的总数量
输出描述:输出一个整数,表示最大乘积
样例输入:5
样例输出:6
评分标准:
5分:能正确输出第一组数据;
5分:能正确输出第二组数据;
5分:能正确输出第三组数据;
5分:能正确输出第四组数据;
5分:能正确输出第五组数据;
5分:能正确输出第六组数据。
测试用例:
|
输入 |
8 |
13 |
22 |
39 |
48 |
59 |
|
输出 |
15 |
72 |
1008 |
72576 |
604800 |
6652800 |
//第一道-编程题using namespace std;int main(){ int n,m; cin >> n; m=(n+1)*(n+1); cout << m; return 0;}
//第二道-编程题
using namespace std;int main(){ char c; cin >> c; if(c == 'A'){ cout << "Apple"; } if(c == 'B'){ cout << "Banana"; } if(c == 'O'){ cout << "Orange"; } if(c == 'P'){ cout << "Pear"; } return 0;}
//第三道-编程题
using namespace std;int N,ans;priority_queue< int,vector<int>,greater<int> >q; //优先队列,小根堆 int main(){ cin>>N; for(int i=0;i<N;i++){ int x; cin>>x; if(q.size()<3){ q.push(x); } else{ int t=q.top(); t+=x; q.pop(); q.push(t); } } cout<<q.top(); return 0;}
//第四道-编程题
using namespace std;int N,M;int F[30]; //从1(+x)到i(+x)的方法数 int main(){ cin>>N>>M; F[1]=1,F[2]=1; for(int i=3;i<=M;i++){ F[i]=F[i-1]+F[i-2]; } cout<<F[M-N+1]; //从N到M,有M-N+1个点 return 0;}
//第五道-编程题using namespace std;int N,sum,MaxM;int a[100],vis[100];void DFS(int k){ //搜索,回溯 if(sum>N) return; for(int i=1;i<N;i++){ if(vis[i]==0 && i>a[k-1]){ a[k]=i; sum+=i; vis[i]=1; if(sum==N){ int M=1; for(int j=1;j<=k;j++) M*=a[j]; MaxM=max(MaxM,M); }else{ DFS(k+1); } sum-=i; vis[i]=0; } }}int main(){ cin>>N; DFS(1); cout<<MaxM<<endl; return 0;}
更多资料,请移步至知识星球。









暂无评论内容