天梯赛测试题2(L1答案及其解析)
目录
L1-1自动编程
思路:
代码:
L1_2太神奇了
思路:
代码:
L1_3洛希极限
思路:
代码:
L1_4吃鱼还是吃肉
思路:
代码:
L1_5不变初心数
思路:
代码:
L1_6字母串
思路:
代码:
L1_7矩阵列平移
思路:
代码:
L1_8均是素数
思路:
代码:
L1-1自动编程
思路:
没有什么思路,直接输出即可
代码:
//
// Created by wxj05 on 2025/3/25.
//
#include "iostream"
using namespace std;
int main(){
int n;
cin>>n;
cout<<"print("<<n<<")"<<endl;
}
L1_2太神奇了
思路:
也是直接输出,直接输出a+b-1即可
代码:
//
// Created by wxj05 on 2025/3/25.
//
#include "iostream"
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a+b-1<<endl;
}
L1_3洛希极限
题目怪长,大都是科普的知识,提取有用部分即可
思路:
就是一个简单的条件判断,由于涉及到小数,最好全都用double类型,不容易出错。
代码:
//
// Created by wxj05 on 2025/3/25.
//
#include "iostream"
using namespace std;
int main(){
double a,b,c;
cin>>a>>b>>c;
double ans;
if(b==0){
ans=a*2.455;
printf("%.2lf",ans);
}
else{
ans=a*1.26;
printf("%.2lf",ans);
}
if(ans>=c) cout<<" "<<"T_T";
else cout<<" "<<"^_^";
}
L1_4吃鱼还是吃肉
思路:
也是简单的条件判断,直接无脑if,符合就输出,不符合就跳过。
代码:
//
// Created by wxj05 on 2025/3/25.
//
#include "iostream"
using namespace std;
int main(){
int n;
cin>>n;
int a,b,c;
for (int i = 0; i < n; ++i) {
cin>>a>>b>>c;
if(a==1){
if(b<130) cout<<"duo chi yu! ";
if(b>130) cout<<"ni li hai! ";
if(b==130) cout<<"wan mei! ";
if(c>27) cout<<"shao chi rou!";
if(c<27) cout<<"duo chi rou!";
if(c==27) cout<<"wan mei!";
}
else{
if(b<129) cout<<"duo chi yu! ";
if(b>129) cout<<"ni li hai! ";
if(b==129) cout<<"wan mei! ";
if(c>25) cout<<"shao chi rou!";
if(c<25) cout<<"duo chi rou!";
if(c==25) cout<<"wan mei!";
}
cout<<endl;
}
}
L1_5不变初心数
思路:
就是将各各位数的数相加进行比较,由于各各位数的数多次运用,可以将其单独写一个函数,使代码更清晰明了。
代码:
//
// Created by wxj05 on 2025/3/26.
//
#include "iostream"
using namespace std;
int gwh(int a){
int sum=0;
while(a){
sum+=a%10;
a/=10;
}
return sum;
}
int main(){
int n,num;
cin>>n;
for (int i = 0; i < n; ++i) {
cin>>num;
if(gwh(num)==gwh(num*2) && gwh(num)==gwh(num*3) && gwh(num)==gwh(num*4) && gwh(num)==gwh(num*5) && gwh(num)==gwh(num*6) && gwh(num)==gwh(num*7) && gwh(num)==gwh(num*8) && gwh(num)==gwh(num*9)){
cout<<gwh(num)<<endl;
}
else{
cout<<"NO"<<endl;
}
}
}
L1_6字母串
思路:
也是简单的条件判断,对输入的字符串逐个进行判断,如果不符合就将标记改成false。
只要满足这两个条件就可以了。
代码:
//
// Created by wxj05 on 2025/3/26.
//
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
string s;
for (int i = 0; i < n; i++) {
bool flag= true;
cin>>s;
for (int j = 0; j < s.size()-1; j++) {
if('a'<=s[j] && s[j]<='z'){//小写
if(!(s[j]-s[j+1]==32 || s[j]-s[j+1]==1)){
flag=false;
}
}
else{
if(!(s[j+1]-s[j]==32 || s[j+1]-s[j]==1)){
flag=false;
}
}
}
if(flag) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
return 0;
}
L1_7矩阵列平移
思路:
这题一定要读懂题,说白了就是矩阵的简单运算。一定要看清楚题目,是1-k,1-k不断的循环,可以将0作为下标,然后判断奇数列。可以写一个函数实时检测数组的每个数据。
注意:数字替换的时候一定要从下往上替换。
代码:
//
// Created by wxj05 on 2025/3/25.
//
#include "bits/stdc++.h"
using namespace std;
vector<vector<int>> a;
int n,k,x;
void print_arr(){
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
int main(){
cin>>n>>k>>x;
a.resize(n, vector<int>(n)); // 初始化二维向量的大小
// 输入二维向量
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin>>a[i][j];
}
}
int p=1;
for (int i = 1; i < n; i+=2) {
if(p>k){
p=1;
}
for (int j = n-1; j >= p; j--) {
a[j][i]=a[j-p][i];
}
for (int j = 0; j < p; ++j) {
a[j][i] = x;
}
p++;
}
// print_arr();// 用于检测数组
for (int i = 0; i < n; ++i) {
int sum=0;
for (int j = 0; j < n; ++j) {
sum+=a[i][j];
}
if(i!=n-1) cout<<sum<<" ";
else cout<<sum;
}
return 0;
}
L1_8均是素数
思路:
主要考察素数的判断,可以[m,n]中的所有素数都找出来,放入数组中存起来,然后就是暴力枚举了,将每种情况都进行判断即可。
看输入格式就不难发现,这道题想让我们枚举。毕竟给的范围是真的小,时间复杂度不会超过1e9.
代码:
//
// Created by wxj05 on 2025/3/25.
//
#include "bits/stdc++.h"
using namespace std;
vector<int> ss_arr;
int ans=0;
bool ss(int a){
if(a==1 || a==0) return false;
if(a==2) return true;
for (int i = 2; i*i <= a; ++i) {
if(a%i==0) return false;
}
return true;
}
void print_arr(){
for(int i=0;i<ss_arr.size();i++){
cout<<ss_arr[i]<<" ";
}
}
int main(){
int m,n;
cin>>m>>n;
for (int i = m; i <= n; ++i) {
if(ss(i)) ss_arr.push_back(i);
}
for (int p = 0; p < ss_arr.size(); ++p) {
for (int q = p; q < ss_arr.size(); ++q) {
for (int r = q; r < ss_arr.size(); ++r) {
if(ss(ss_arr[p]*ss_arr[q]+ss_arr[r]) && ss(ss_arr[p]*ss_arr[r]+ss_arr[q]) && ss(ss_arr[q]*ss_arr[r]+ss_arr[p])){
ans++;
}
}
}
}
cout<<ans;
return 0;
}