G和H我不会,H题李昂已经发题解了,等着看他的吧,我写的肯定是不如他
A题
这道题可以拿字符串写,如果字符串的长度只有2,且组成该字符串的两个字符相同那它就是好数
using namespace std;
#define endl '\n'
int main(){
string a;
cin>>a;
if (a.length()==2 && a[0]==a[1])cout<<"Yes";
else cout<<"No";
return 0;
}
B题
字符串有三个字符,直接输出第一个和第三个就行
using namespace std;
#define endl '\n'
int main(){
string a;
cin>>a;
cout<<a[0]<<a[2];
return 0;
}
C题
如果x,y,n相等,那他们的最大公约数就是n本身,但题目里说了x和y不相等,那我们令y=2x就好了
using namespace std;
#define endl '\n'
int main(){
int q;
cin>>q;
while (q--){
long long a;
cin>>a;
cout<<a<<' '<<a*2<<endl;
}
return 0;
}
D题
暴力就能过,但是我也只会暴力
把数的每个数位分开,其中包含x就计数即可
using namespace std;
#define endl '\n'
int main(){
int n,x,ans=0;
cin>>n>>x;
for (int i = 1; i <= n; ++i) {
int temp=i;
while (temp){
if (temp%10==x)ans++;
temp/=10;
}
}
cout<<ans;
return 0;
}
E题
我们先比一下大小,让短的是B,长的是A
假如A=12345678 B=111,那我们计算的过程是这样的
12345678
+ 111
————————————
12345789
由此可见,我们是从A和B长度的差值开始按数位计算,一共计算B的长度次
如果有哪一位的计算结果大于等于10,那它就是Hard,没有就是Easy
using namespace std;
#define endl '\n'
int main(){
string a,b;
cin>>a>>b;
if (b.length()>a.length())swap(a,b);
int doing =a.length()-b.length();
for (int i=0;i<b.length();i++) {
int temp=a[doing+i]-'0'+b[i]-'0';
if (temp>=10){
cout<<"Hard";
return 0;
}
}
cout<<"Easy";
return 0;
}
F题
做这道题的时候我还不知道有取整函数这玩意/(ㄒoㄒ)/~~
向上取整减向下取整,再加上因升到高级的奖而补充上来的人的数量就行了
using namespace std;
#define endl '\n'
int main(){
double n;
cin>>n;
int ansA,ansB,ansC;
double A=n*0.1,B=n*0.2,C=n*0.3;
ansA=ceil(A)-floor(A);
ansB=ceil(B)-floor(B)+ansA;
ansC=ceil(C)-floor(C)+ansB;
cout<<ansA<<' '<<ansB<<' '<<ansC;
}
I题
答案是3181,代码直接这么写就行了↓
using namespace std;
#define endl '\n'
int main(){
cout<<3181;
return 0;
}
我的结果是模拟出来的,除了模拟我也不会别的
先设定一个长度为9的数组,填充上2021,模拟每种卡片的数量,用n表示当前试图拼的数字
如果某种卡片数量已经到0了,那就拼不出n,能拼出来最大的就是n-1
using namespace std;
#define endl '\n'
int main(){
int arr[9];
fill(arr,arr+9,2021);
int n=0;
while (1){
n++;
cout<<n<<endl;
int temp=n;
while (temp){
if (arr[temp%10]<=0){cout<<n-1;return 0;}
else arr[temp%10]--;
temp/=10;
}
}
}