L1-1 天梯赛座位分配 (20 分)(待补)
题意:
天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1 所学校开始,各校的第 1 位队员顺次入座,然后是各校的第 2 位队员…… 以此类推。如果最后只剩下 1 所学校的队伍还没有分配座位,则需要安排他们的队员隔位就坐。本题就要求你编写程序,自动为各校生成队员的座位号,从 1 开始编号。
思路:
代码:
L1-2 倒数第N个字符串 (15 分)
题意:
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。
思路:
正解的思路应该是先求字符串所有的种类数,再减去x,就能得到第x大的字符串然后使用26进制的转换,模拟时,我用暴力模拟不停的开个vector放字符串输出,会扣三分。
代码:
#include<bits/stdc++.h> #include<unordered_map> using namespace std; int main() { int l,r,i,x,j; cin>>l>>x; int d1=pow(26,l)-x;; string s1; vector<char >ans; while(d1!=0) { int x; x=d1%26; d1/=26; ans.push_back(x+'a'); } reverse(ans.begin(),ans.end()); for(auto x:ans) cout<<x; cout<<endl; return 0; }
L1-3 打折 (5 分)
题意:
去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情。例如原价 ¥988,标明打 7 折,则折扣价应该是 ¥988 x 70% = ¥691.60。本题就请你写个程序替客户计算折扣价。
思路:
简单题直接输出
#include<bits/stdc++.h> using namespace std; int main() { double n,x; cin>>n>>x; cout<<fixed<<setprecision(2)<<(n*x*0.1)<<endl; }
L1-4 2018我们要赢 (5 分)
题意:
2018年天梯赛的注册邀请码是“2018wmyy”,意思就是“2018我们要赢”。本题就请你用汉语拼音输出这句话。
思路:
直接输出即可
代码:
#include<bits/stdc++.h> using namespace std; int main() { cout<<"2018\nwo3 men2 yao4 ying2 !"<<endl; }
L1-5 电子汪 (10 分)
题意:
据说汪星人的智商能达到人类 4 岁儿童的水平,更有些聪明汪会做加法计算。比如你在地上放两堆小球,分别有 1 只球和 2 只球,聪明汪就会用“汪!汪!汪!”表示 1 加 2 的结果是 3。
本题要求你为电子宠物汪做一个模拟程序,根据电子眼识别出的两堆小球的个数,计算出和,并且用汪星人的叫声给出答案。
思路:
直接输出a+b次狗叫就行
代码:
#include<bits/stdc++.h> using namespace std; int main() { int a,b; cin>>a>>b; for(int i=0;i<a+b;i++)cout<<"Wang!"; }
L1-6 福到了 (15 分)
题意:
“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。
思路:
输入按许顺入就行,输出的时候留一下,先倒着存好然后进行比较,相同就输出"bu yon dao le",具体就看代码吧。
代码:
#include<bits/stdc++.h> using namespace std; const int maxn=105; char m1[maxn][maxn],m2[maxn][maxn]; int n,m; bool check() { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) if(m1[i][j]!=m2[i][j]) return false; } return true; } int main() { char x; int i,j,d; cin>>x>>n;(m=n); getchar(); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { m1[i][j]=getchar(); } getchar(); } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { m2[i][j]=m1[n-i+1][n-j+1]; } } if(check()) { cout<<"bu yong dao le"<<endl; } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(m2[i][j]!=' ') { cout<<x; } else { cout<<' '; } } cout<<endl; } }
L1-7 谁是赢家 (10 分)
题意:
某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票和 3 名评委投票两部分共同决定。规则为:如果一位艺人的观众票数高,且得到至少 1 名评委的认可,该艺人就胜出;或艺人的观众票数低,但得到全部评委的认可,也可以胜出。节目保证投票的观众人数为奇数,所以不存在平票的情况。本题就请你用程序判断谁是赢家。
思路:
稍微判断一下,对着题意模拟即可,判断其中一人赢需要的条件,然后else输出一下即可
代码:
#include<bits/stdc++.h> using namespace std; int main() { int pa,pb; int d1,d2,d3; cin>>pa>>pb; cin>>d1>>d2>>d3; if(d1+d2+d3==0||(d1+d2+d3!=3)&&pa>pb) { cout<<"The winner is a: "<<pa<<" + "<<3-(d1+d2+d3)<<endl; } else { cout<<"The winner is b: "<<pb<<" + "<<(d1+d2+d3)<<endl; } return 0; }