当前位置:   article > 正文

GLPT团队程序设计天梯赛 模拟赛 2023 L1部分_传说这是集美大学的学生对话。本题要求你做一个简单的自动问答机,对任何一个问句,

传说这是集美大学的学生对话。本题要求你做一个简单的自动问答机,对任何一个问句,

目录

L1-1 嫑废话上代码 (5)

L1-2 九牛一毛 (5)

L1-3 小孩子才做选择,大人全都要 (10)

L1-4 拯救外星人 (10)

L1-5 试试手气 (15)

 L1-6 打PTA (15)

L1-7 机工士姆斯塔迪奥 (20) 

L1-8 随机输一次 (20)


L1-1 嫑废话上代码 (5)

Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。

输入格式:

本题没有输入。

输出格式:

在一行中输出 Talk is cheap. Show me the code.

输入样例:

输出样例:

Talk is cheap. Show me the code.

 个人题解:

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout<<"Talk is cheap. Show me the code.";
  6. return 0;
  7. }

L1-2 九牛一毛 (5)

这是一道脑筋急转弯题:猪肉一斤 15 元,鸡肉一斤 20 元,那么一毛钱能买多少头牛?

答案是:9 —— 因为“九牛一毛”。

本题就请你按照这个逻辑,计算一下 N 块钱能买多少斤猪肉、多少斤鸡肉、多少头牛。

输入格式:

输入在一行中给出一个不超过 1000 的正整数 N,即以“元”为单位的货币量。

输出格式:

在一行中顺序输出 N 块钱能买多少斤猪肉、多少斤鸡肉、多少头牛。三个数字都只取整数部分,其间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

18

输出样例:

1 0 1620

个人题解 :

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int n;
  6. cin>>n;
  7. printf("%d %d %d",n/15,n/20,n*90);
  8. return 0;
  9. }

L1-3 小孩子才做选择,大人全都要 (10)

阿汪面前有两只盲盒,每只盒子打开都有两种可能:或者装了 X 克狗粮,或者是一只容量为 Y 克的狗粮储蓄盒。如果是狗粮,阿汪可以快乐地吃掉;如果是空储蓄盒,那就倒霉了,阿汪必须想办法找到狗粮把这只储蓄盒装满,自己还吃不到。

正当阿汪发愁不知道该怎么选的时候,铲屎官大手一挥:“小孩子才做选择,大人全都要!”但全都要的结果,却不一定是赚了还是亏了……

我们假设聪明的阿汪总是能嗅出狗粮最多的盒子,并且绝不会选任何储蓄盒。而铲屎官没有这样的鼻子,他一定是全都要。铲屎官如果打开了有储蓄盒的盒子,就必须想办法把储蓄盒装满,他会优先用另一只盒子里的狗粮装(如果另外一只盒子里有狗粮),不够了还得自己去买新的狗粮,这样阿汪可就亏啦,什么都吃不到了。本题就请你判断阿汪到底是赚了还是亏了。

输入格式:

输入在一行中给出两个整数,绝对值都不超过 100,中间用一个空格分开,分别代表两只盒子里的东西。如果是正数就表示是狗粮的份量,如果是负数就表示绝对值是空盆的容量。两个数都肯定不是 0,因为保证没有空盒子。

输出格式:

第一行输出两个结果:如果让阿汪选能吃到的狗粮 A,和如果铲屎官全都要能吃到的狗粮 B。两个数字间用一个空格分开。如果铲屎官的决定让阿汪赚到了,就在第二行输出一个笑脸 ^_^,否则输出一个哭脸 T_T。但如果反正什么都吃不到(两个盒子里都没有狗粮),就输出一张躺平脸 -_-

输入样例 1:

12 18

输出样例 1:

  1. 18 30
  2. ^_^

输入样例 2:

12 -18

输出样例 2:

  1. 12 0
  2. T_T

个人题解: 

  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. int main()
  5. {
  6. int n,m;
  7. cin>>n>>m;
  8. int g = max(n,m);
  9. int r = n+m;
  10. if(g<=0)
  11. g=0;
  12. if(r<=0)
  13. r=0;
  14. printf("%d %d\n",g,r);
  15. if(g==0&&r==0)
  16. printf("-_-");
  17. else if(g<r)
  18. printf("^_^");
  19. else
  20. printf("T_T");
  21. return 0;
  22. }

L1-4 拯救外星人 (10)

你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“5+7”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。

本题就请你写程序模仿外星人的行为。

输入格式:

输入在一行中给出两个正整数 A 和 B。

输出格式:

在一行中输出 (A+B) 的阶乘。题目保证 (A+B) 的值小于 12。

输入样例:

3 6

输出样例:

362880

 个人题解:

  1. #include<iostream>
  2. using namespace std;
  3. int fact(int x)
  4. {
  5. int fac=1;
  6. for(int i=2;i<=x;i++)
  7. fac*=i;
  8. return fac;
  9. }
  10. int main()
  11. {
  12. int a,b;
  13. cin>>a>>b;
  14. cout<<fact(a+b);
  15. return 0;
  16. }

L1-5 试试手气 (15)

我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件:

  • 1、每个骰子摇出的点数都跟它之前任何一次出现的点数不同;
  • 2、在满足条件 1 的前提下,每次都能让每个骰子得到可能得到的最大点数。

那么你应该可以预知自己第 n 次(1≤n≤5)摇出的结果。

输入格式:

输入第一行给出 6 个骰子的初始点数,即 [1,6] 之间的整数,数字间以空格分隔;第二行给出摇的次数 n(1≤n≤5)。

输出格式:

在一行中顺序列出第 n 次摇出的每个骰子的点数。数字间必须以 1 个空格分隔,行首位不得有多余空格。

输入样例:

  1. 3 6 5 4 1 4
  2. 3

输出样例:

4 3 3 3 4 3

样例解释:

这 3 次摇出的结果依次为:

  1. 6 5 6 6 6 6
  2. 5 4 4 5 5 5
  3. 4 3 3 3 4 3

个人题解: 

  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. int main()
  5. {
  6. vector<int>a[6];
  7. int b[6],n;
  8. for(int i=0;i<6;i++)
  9. cin>>b[i];
  10. cin>>n;
  11. for(int i=0;i<6;i++)
  12. {
  13. for(int j=0;j<6;j++)
  14. {
  15. if(b[i]!=6-j)
  16. a[i].push_back(6-j);
  17. }
  18. }
  19. for(int i=0;i<6;i++)
  20. {
  21. printf("%d",a[i][n-1]);
  22. if(i<5)
  23. printf(" ");
  24. }
  25. return 0;
  26. }

 L1-6 打PTA (15)

传说这是集美大学的学生对话。本题要求你做一个简单的自动问答机,对任何一个问句,只要其中包含 PTA 就回答 Yes!,其他一概回答 No.

输入格式:

输入第一行给出一个整型范围内的正整数 N,随后 N 行,每行给出一个长度不超过 80 的字符串,为用户输入的句子,由英文字母、数字、空格和标点符号组成,以回车结束。

输出格式:

对每一行句子,如果其结尾字符为问号 ? 则判断此句中有无 PTA?如果有则在一行中输出 Yes!,否则输出 No.。如果不是问号结尾,则敷衍地回答 enen

输入样例:

  1. 5
  2. Hello!
  3. Do you still play WZRY?
  4. Chi Ji?
  5. you play PTA ah?
  6. how about pta site?

输出样例:

  1. enen
  2. No.
  3. No.
  4. Yes!
  5. No.

个人题解:

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. int main()
  5. {
  6. int n;
  7. cin>>n;
  8. cin.get();
  9. while(n--)
  10. {
  11. string s;
  12. getline(cin,s);
  13. if(s[s.size()-1]!='?')
  14. cout<<"enen"<<endl;
  15. else
  16. {
  17. if(s.find("PTA")!=-1)
  18. cout<<"Yes!"<<endl;
  19. else
  20. cout<<"No."<<endl;
  21. }
  22. }
  23. return 0;
  24. }

L1-7 机工士姆斯塔迪奥 (20) 

在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。

你需要处理这个副本其中的一个机制:N×M 大小的地图被拆分为了 N×M 个 1×1 的格子,BOSS 会选择若干行或/及若干列释放技能,玩家不能站在释放技能的方格上,否则就会被击中而失败。

给定 BOSS 所有释放技能的行或列信息,请你计算出最后有多少个格子是安全的。

输入格式:

输入第一行是三个整数 N,M,Q (1≤N×M≤105,0≤Q≤1000),表示地图为 N 行 M 列大小以及选择的行/列数量。

接下来 Q 行,每行两个数 Ti​,Ci​,其中 Ti​=0 表示 BOSS 选择的是一整行,Ti​=1 表示选择的是一整列,Ci​ 为选择的行号/列号。行和列的编号均从 1 开始。

输出格式:

输出一个数,表示安全格子的数量。

输入样例:

  1. 5 5 3
  2. 0 2
  3. 0 4
  4. 1 3

输出样例:

12

个人题解: 

  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int main()
  5. {
  6. int n,m,q;
  7. cin>>n>>m>>q;
  8. int a[n][m];
  9. memset(a,0,sizeof(a));
  10. while(q--)
  11. {
  12. int sel,del;
  13. cin>>sel>>del;
  14. if(sel)
  15. for(int i=0;i<n;i++)
  16. a[i][del-1]=1;
  17. else
  18. for(int i=0;i<m;i++)
  19. a[del-1][i]=1;
  20. }
  21. int num=0;
  22. for(int i=0;i<n;i++)
  23. for(int j=0;j<m;j++)
  24. if(a[i][j]==0)
  25. num++;
  26. cout<<num;
  27. return 0;
  28. }

L1-8 随机输一次 (20)

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

现要求你编写一个控制赢面的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方意识到你在控制结果,你需要隔 K 次输一次,其中 K 是系统设定的随机数。

输入格式:

输入首先在第一行给出正整数 N(≤10),随后给出 N 个系统产生的不超过 10 的正随机数 { K1​,K2​,⋯,KN​ },数字间以空格分隔。这意味着第 i(i=0,1,⋯,N−1)次输局之后应该隔 Ki+1​ 次再让下一个输局。如果对方出招太多,则随机数按顺序循环使用。例如在样例中,系统产生了 3 个随机数 {2, 4, 1},则你需要:赢 2 次,输 1 次;赢 4 次,输 1 次;赢 1 次,输 1 次;然后再次回到第 1 个随机数,赢 2 次,输 1 次。

之后每行给出对方的一次出招:“ChuiZi”代表“锤子”、“JianDao”代表“剪刀”、“Bu”代表“布”。“End”代表输入结束,这一行不要作为出招处理。输入保证对方至少出了一招。

输出格式:

对每一个输入的出招,按要求输出赢或输局的招式。每招占一行。

输入样例:

  1. 3 2 4 1
  2. ChuiZi
  3. JianDao
  4. Bu
  5. JianDao
  6. Bu
  7. ChuiZi
  8. ChuiZi
  9. ChuiZi
  10. JianDao
  11. Bu
  12. JianDao
  13. Bu
  14. ChuiZi
  15. End

输出样例:

  1. Bu
  2. ChuiZi
  3. ChuiZi
  4. ChuiZi
  5. JianDao
  6. Bu
  7. Bu
  8. JianDao
  9. ChuiZi
  10. ChuiZi
  11. ChuiZi
  12. JianDao
  13. JianDao

 个人题解:

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. int main()
  5. {
  6. int n,t=0,i=0;
  7. int a[11];
  8. string s;
  9. cin>>n;
  10. for(int i=0;i<n;i++)
  11. cin>>a[i];
  12. while(cin>>s&&s!="End")
  13. {
  14. int f=0; //标记是否要输
  15. if(t==a[i])
  16. {
  17. f=1;
  18. t=0;
  19. i++;
  20. if(i==n)
  21. i=0;
  22. }
  23. else
  24. t++;
  25. if(s=="Bu")
  26. {
  27. if(f)
  28. cout<<"ChuiZi"<<endl;
  29. else
  30. cout<<"JianDao"<<endl;
  31. }
  32. else if(s=="ChuiZi")
  33. {
  34. if(f)
  35. cout<<"JianDao"<<endl;
  36. else
  37. cout<<"Bu"<<endl;
  38. }
  39. else
  40. {
  41. if(f)
  42. cout<<"Bu"<<endl;
  43. else
  44. cout<<"ChuiZi"<<endl;
  45. }
  46. }
  47. return 0;
  48. }

ps:第一次写题解,哪里有写的不好的地方,还望各位大佬指出。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/796484
推荐阅读
相关标签
  

闽ICP备14008679号