所以谁能告诉我L1-1的题意qwq
L1-2
题意:给定一个长度为$L$的,仅由小写字母组成的字符串,问所有字符串中字典序第$n$大的字符串是什么?
输入格式:一行两个正整数$L,n$。$2 \leq L \leq 6$,$n \leq 10^5$。
输出格式:一个长度为$L$的,仅由小写字母组成的字符串。
算法:如果”$a$”对应数字$0$,”$b$”对应数字”$1$”,以此类推,”$z$”对应数字$25$。把这个字符串看做是$26$进制的自然数。
#include<bits/stdc++.h>
using namespace std;
int main()//pow(26,6)=308915776
{
int l,n;
cin>>l>>n;
int number=1;
for(int i=1;i<=l;++i)number*=26;
number-=n;//第n个字符串对应的数字
char digit[26];//数码映射到字符
for(int i=0;i<26;++i)digit[i]=i+'a';
string str;
if(!number){//特判字符串仅由字母"a"组成的情况
while(l--)cout<<'a';
return 0;
}
while(number){
str=digit[number%26]+str;
number/=26;
}
cout<<setw(l)<<setfill('a')<<str;//前导0要补足
return 0;
}
L1-3
题意:给定原价与折扣数,输出现价。
输入格式:一行两个正整数$n,k$。$k \in [1,9]$,$n \leq 10000$
输出格式:一个浮点数,保留两位小数。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
printf("%.2lf",a*b*0.1);
return 0;
}
L1-4
题意:输出如下内容:
2018
wo3 men2 yao4 ying2 !
输入格式:无输入。
输出格式:见上。
#include<bits/stdc++.h>
using namespace std;
int main()
{
printf("2018\nwo3 men2 yao4 ying2 !");
return 0;
}
L1-5
题意,输入正整数$a,b$,输出$(a+b)$次的字符串”Wang!”。
输入格式:一行两个正整数$a,b$。$a,b \leq 9$。
输出格式:一行字符串。
#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!";
}
return 0;
}
L1-6
题意:给定一个$n \times n$的仅由字符和空格组成的方阵,现将其进行中心对称变换后,判断变化后的矩阵是否和原矩阵一样。并输出变化后的矩阵。
输入格式:第一行一个字符$c$和一个正整数$n$,分别表示输出的方阵中字符部分用字符$c$代替,和方阵规模。
接下来$n$行是一个$n \times n$的方阵,字符部分用$”@”$表示。$n \leq 100$。
输出格式:如果变换后的矩阵与原矩阵相同,输出一行”bu yong dao le”,否则不输出。接着输出变换后的方阵。
//代码来源:http://www.ishenping.com/ArtInfo/1572960.html
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, count = 0;
char ch, a[1000][1000], b[1000][1000];
scanf("%c%d", &ch, &n);
getchar();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
scanf("%c", &a[i][j]);
getchar();
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
b[i][j] = a[n - 1 - i][n - 1 - j];
if (a[i][j] == b[i][j])
count++;
if (b[i][j] == '@')
b[i][j] = ch;
}
}
if (count == n * n)
printf("bu yong dao le\n");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
printf("%c", b[i][j]);
printf("\n");
}
return 0;
}
顺便一提,做完这题我学会了方阵的输入方法。
int n;//方阵规模
char a[N][N];//方阵
getchar();
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
scanf("%c",&a[i][j]);
}
getchar();
}
L1-7
题意:选秀节目中,有两个候选人a,b。观众和$3$为评委分别为他们投票。如果候选人a的观众得票数大于b的,且获得至少一位评委的票,则a获胜。如果候选人a获得$3$位评委全部的票,则无视观众的票数,直接获胜。反之亦然。
输入格式:第一行两个正整数$P_a,P_b$,表示a、b获得的观众票数。$a,b \leq 1000$且$a+b \equiv 1 \pmod{2}$
第二行三个自然数$x,y,z$,代表评委投票。等于$0$时表示投给a,等于1时表示投给b。
输出格式:”The winner is x: P1 + P2”,其中x表示获胜的人,P1表示胜者获得的观众票数,P2表示胜者获得的评委总票数。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int audience1,audience2,judge1,judge2,judge3;
cin>>audience1>>audience2>>judge1>>judge2>>judge3;
if(judge1+judge2+judge3==0)printf("The winner is a: %d + 3",audience1);
else if(judge1+judge2+judge3==3)printf("The winner is b: %d + 3",audience2);
else{
if(audience1>audience2)printf("The winner is a: %d + %d",audience1,(judge1==0)+(judge2==0)+(judge3==0));
else printf("The winner is a: %d + %d",audience2,(judge1==1)+(judge2==1)+(judge3==1));
}
return 0;
}
L1-8
题意:$n$个人说一个小于$100$的正整数,谁说的数字最接近平均数的一半谁就获胜。保证胜者只有一个。
输入格式:第一行输入一个正整数$n$。
接下来$n$行,每行一个仅由英文字母组成的字符串$s_i$和一个正整数$a_i$,表示名字为$s_i$的人说的数字是$a_i$。$|s_i| \leq 8$,$a_i \leq 100$。
输出格式:一行内输出一个正整数和一个字符串,分别表示平均数的一半和胜者的名字。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<string> person[111];//person[i]表示说的数字是i的人的名字,因为可能不止一个,所以用vector<string>存
int average=0;
for(int i=0;i<n;++i){
string name;
int score;
cin>>name>>score;
person[score].push_back(name);
average+=score;
}
average=average/n/2;
int i=average,j=average;
while(1){
if(i>=0){
if(person[i].size()){
cout<<average<<' '<<person[i][0];
return 0;
}
}
if(j<=100){
if(person[j].size()){
cout<<average<<' '<<person[j][0];
return 0;
}
}
i-=(i>=0);
j+=(j<=100);
}
return 0;
}
掉头发不可怕,可怕的是啥也不会,%%%