2022年11月

编程题

第一题(难度系数2,15 个计分点)

题目编号:22112701CB01 知识点:运算符

编程实现切割蛋糕

题目描述:          

有一块矩形蛋糕,小明从蛋糕的正上方横向和纵向各切N刀(1<N<100),每刀互不重合。计算出蛋糕被切割成了几块。

                 

例如:N = 2,蛋糕被切割成9块。

               

2022年11月-资灵

输入描述:输入一个正整数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、OP中任意一个大写字母

输出描述:输出一个字符串,表示大写字母对应的英文单词(单词首字母大写)


样例输入:A

样例输出:Apple


评分标准:

4分:能正确输出第一组数据;

4分:能正确输出第二组数据;

5分:能正确输出第三组数据;

5分:能正确输出第四组数据。


测试用例:

输入

B

O

P

A

输出

Banana

Orange

Pear

Apple





第三题(难度系数 3,20 个计分点)

题目编号:22112701CB03 知识点:循环 判断

编程实现:业务办理时间

题目描述:

某服务大厅同时开放3个窗口为客户办理业务,窗口编号分别为123

现有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,(如下图):

               

2022年11月-资灵

 

 

初始客户编号为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名小朋友分别按照下图的位置站好。

               

2022年11月-资灵

每名小朋友只能按照图中箭头指向的方向移动。给出两名小朋友的编号N和M1≤NM22),请你找出从编号N到编号M共有多少条不同的路线。

 

   

例如:N=3M=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和M1≤NM22)分别表示两名小朋友的编号,之间以一个空格隔

输出描述:输出一个整数,表示从编号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



//第一道-编程题#include<iostream>using namespace std;int main(){  int n,m;  cin >> n;  m=(n+1)*(n+1);  cout << m;  return 0;}





//第二道-编程题

#include<iostream>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;}







//第三道-编程题


#include<bits/stdc++.h>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;}

//第四道-编程题

#include<bits/stdc++.h>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;}
//第五道-编程题#include<bits/stdc++.h>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;}

更多资料,请移步至知识星球。

2022年11月-资灵


温馨提示: 本文最后更新于2023-11-01 16:37:37,本站资源部分来自网络,由老师收集整理,如有侵犯你的权益请联系管理员E-mail:1679716715@qq.com 我们会第一时间进行审核删除。站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请在下载24小时内删除!,请在下方 留言或联系 资灵
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容

投稿


点击在线投稿
投稿邮箱:1679716715@qq.com
交流 QQ:1679716715