虚拟星辰
大家好,我是新人,这是我的第一个博客,6月29日的3级认证
T1
题目大致是这样的:
小杨发明了一套密码系统,具体来说,他把字母的顺序向后移了N位。
比如说,原来的字母顺序是:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
当N为1时,字母顺序变为:
BCDEFGHIJKLMNOPQRSTUVWXYZA
当N为2时,字母顺序变为:
CDEFGHIJKLMNOPQRSTUVWXYZAB
当N为3时,字母顺序变为:
DEFGHIJKLMNOPQRSTUVWXYZABC
我们需要通过N,找出新的字母顺序。
输入
只有一个值,也就是N。
输出
输出新的字母顺序。
输入样例
3
输出样例
DEFGHIJKLMNOPQRSTUVWXYZABC
题解
这道题我们可以换一种看法,也就是把前N位字母移到字母顺序的末尾即可。但是这里要注意,如果N是26的倍数,那么输出的依然是ABCD……Z的顺序,因为抵消了;如果N大于26,就要取N%26,因为里面能被26整除的部分也抵消了,只有剩下的部分对字母顺序有影响。
代码:
#include <bits/stdc++.h>
using namespace std;
string s;
int n;
int main(){
cin>>n;
for(int i=0;i<26;i++){//生成现实中的字母顺序
s[i]=(char)i+65;//65是'A'的ascll码值
}
if(n%26==0){//判断N是不是26的倍数
cout<<s;//如果是26的倍数,直接输出S
return 0;
}
else{
n=n%26;
for(int i=n;i<26;i++){
cout<<s[i];//第n+1至26位
}
for(int i=0;i<n;i++){
cout<<s[i];//前n位
}
}
return 0;
}
T2
题目大致是这样的:
给出一个长N的序列A,判断是否存在一个Ai,使Ai是A中所有数的倍数。
存在输出Yes,否则输出No。
输入
第一行:一个值t,表示有t组数据
接下来有2t行,每两行组成一组数据:
第一行为N
第二行有N个整数,表示A序列。
输出
共t行,第i行表示第i组数据的答案。
输入样例
2
3
1 2 4
5
1 2 3 4 5
输出样例
Yes
No
题解
一个数的倍数绝对不小于这个数本身,所以A序列中如果有所有数的公倍数,那么它一定是A中最大的数。
我们找到A中的最大值,判断它是否是A有所有数的公倍数即可。思维灵活点就不会像我一样在这道题上卡半个小时……
代码:
#include <bits/stdc++.h>
using namespace std;
int t,n,a[10005];
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n;
int maxn=-1;//最大值变量
for(int j=1;j<=n;j++){
cin>>a[j];
if(a[j]>maxn){
maxn=a[j];
}
}
int flag=1;//flag用于避免两次输出,当执行完for循环后仍等于1,说明输出Yes
for(int j=1;j<=n;j++){
if(maxn%a[j]!=0){
cout<<"No\n";
flag=0;//避免后面再次输出Yes,flag为0代表答案错误,不能输出Yes
break;//得出结果为No后,不用再继续判断了,退出循环可以节省时间
}
}
if(flag==1) cout<<"Yes\n";
}
return 0;
}
由于是第一次写博客,写的有些慢,6月29日考试今天才发,并且随笔中可能有一些错误,请谅解!