PTA天梯赛L1 091-100题目解析

发布于:2025-06-21 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

1.L1-091 程序员买包子

2.L1-092 进化论

3.L1-093 猜帽子游戏

4.L1-094 剪切粘贴

5.L1-095 分寝室

6.L1-096 谁管谁叫爹

7.L1-097 编程解决一切

8.L1-098 再进去几个人

9.L1-099 帮助色盲

10.L1-100 四项全能


1.L1-091 程序员买包子

#include<iostream>

using namespace std;


int n,m,k;
string x;
signed main(){
	cin>>n>>x>>m>>k;
	if (k==n) cout<<"mei you mai "<<x<<" de";
	else if (k==m) cout<<"kan dao le mai "<<x<<" de";
	else cout<<"wang le zhao mai "<<x<<" de";	
	
	return 0;
}

2.L1-092 进化论

#include<iostream>

using namespace std;

int n;

int a,b,c;
signed main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a>>b>>c;
		if (a*b==c ){
			cout<<"Lv Yan"<<endl;
		}else if (a+b==c){
			cout<<"Tu Dou"<<endl;
		}
		else if (a*b!=c && a+b!=c){
			cout<<"zhe du shi sha ya!"<<endl;
		}
	}
	return 0;
}

3.L1-093 猜帽子游戏

#include<iostream>

using namespace std;

int n,k;
int arr[110];

int res[110];

//  对arr 和  res的前n个结果进行判断
//每人头上被扣了一顶帽子,有的是黑色的,有的是黄色的。
//用数字 1 表示黑色、2 表示黄色之外,0 表示这个宝宝弃权不猜。
bool check(int n){
	bool errors=false,bingo=false;
	for(int i=1;i<=n;i++){
		if (res[i]==0) continue;
		if (res[i]==arr[i]) bingo=true;
		else errors=true;
	}
	if (bingo && !errors) return true;
	return false;
} 
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>arr[i]; 
	}
	cin>>k;
	for(int i=0;i<k;i++){
		for(int j=1;j<=n;j++){
			cin>>res[j];
		}
		if (check(n)){
			cout<<"Da Jiang!!!"<<endl;
		}
		else {
			cout<<"Ai Ya"<<endl;
		}
	}
	return 0;
}

4.L1-094 剪切粘贴

解析:

注意string相关的API及其边界即可。

#include<iostream>
#include<string>
using namespace std;

string inits;
int n;

string a,b;
int starts,overs;

signed main(){
	cin>>inits;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>starts>>overs>>a>>b;
		string cut=inits.substr(starts-1,overs-starts+1);
		string findStr=a+b;
		// 切掉 
		inits.erase(starts-1,overs-starts+1);
		// 插入
		int pos=inits.find(findStr);
		if (pos != string::npos){
            // 也可以找到第一个b所在的index进行插入
			inits.insert(pos+a.size(),cut);
		} else {
			inits+=cut;
		}
	}	
	
	cout<<inits<<endl;
	
	return 0;
}

5.L1-095 分寝室

解析:

将男女每个寝室分配人数,在2-Nx之间进行枚举即可,然后得到人数差最小的方案

题目奇怪的是10^5数据范围的情况下,n^2算法不会超时,应该数据范围太弱了

#include<iostream>
#include<algorithm>
using namespace std;

#define debug(x) cout<<"变量"<<#x<<"的值是"<<x<<endl;


int n0,n1,n;

int res=1e5+10;

bool flag=false;
int value=-1;
signed main(){
	cin>>n0>>n1>>n;
	for(int i=2;i<=n0;i++){
		if(n0%i==0){
			for(int j=2;j<=n1;j++){
				if (n1%j==0 && n0/i+n1/j==n && abs(i-j)<res){
					res=abs(i-j);
					value=i;
					flag=true;
					break;
				}
			}
		}
	}
	if (flag){
		cout<<n0/value<<" "<<n-n0/value<<endl;
	}else {
		cout<<"No Solution"<<endl;
	}
	return 0;
}

6.L1-096 谁管谁叫爹

#include<iostream>

using namespace std;

//#define int long long
int n;
int a,b;

inline int calcOne(int num){
	int sum=0;
	while(num){
		sum+=num%10;
		num/=10;	
	}
	return sum;
}
signed main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a>>b;
		int sa,sb;
		sa=calcOne(a);
		sb=calcOne(b);
		if (a%sb==0 && b%sa!=0){
			cout<<"A"<<endl;
		}else if (a%sb!=0 && b%sa==0){
			cout<<"B"<<endl;
		}else {
			if (a>b) cout<<"A"<<endl;
			else cout<<"B"<<endl;
		}
	}	
	
	
	return 0;
}

7.L1-097 编程解决一切

#include<iostream>
#include<iomanip>
#include<vector>
#include<cmath>
#include<utility>
#include<algorithm>

//#include<sstream>
//#include<cctype>

using namespace std;

signed main(){
	cout<<"Problem? The Solution: Programming."; 
	return 0;
} 

8.L1-098 再进去几个人

#include<iostream>
#include<iomanip>
#include<vector>
#include<cmath>
#include<utility>
#include<algorithm>

//#include<sstream>
//#include<cctype>

using namespace std;

int a,b;

signed main(){
	cin>>a>>b;
	cout<<b-a;
	return 0;
} 

9.L1-099 帮助色盲

解析:

这道题很恶心的是,题目描述很垃圾

其一、对于输入数据描述不一致。前面提到“前方两米内有人”,后面又是“前方两米内是否有同向行走的人”,实际上这两个表述的都是后者的意思。

其二、对于部分情况不交代。比如在黄灯时,提示音不工作,但是色盲怎么执行策略,这个逻辑没有提出。应该是按照生活常识,经历“绿灯-黄灯-红灯-绿灯”的过渡,默认黄灯也要停止。所以在非绿灯时,行人都应该停止前进。(哪怕是在红灯时,有同向行人闯红灯,也要停下来)

感觉命题组出题审查不够全面,每年L1系列都会出一道含义模糊的题面,不知道是故意的还是确实语文水平有待提高。

#include<iostream>
#include<iomanip>
#include<vector>
#include<cmath>
#include<utility>
#include<algorithm>

//#include<sstream>
//#include<cctype>

using namespace std;

int laten_color; //  0 表示红灯、1 表示绿灯、2 表示黄灯
int status; // 取值为 0 表示前方两米内没有同向行走的人、1 表示有。

signed main(){
	cin>>laten_color>>status;
	// 当前交通灯为红灯或绿灯时
	if (laten_color == 0 || laten_color == 1) {
		// 有同向行走的人,则患者自己可以判断不提示 
		if(status) cout<<"-"<<endl<<( laten_color == 1 ? "move":"stop")<<endl;
		else {
			if (laten_color) cout<<"dudu"<<endl<<"move"<<endl;
			else cout<<"biii"<<endl<<"stop"<<endl;
		}
	// 黄灯必须停止,这里题目没说明 
	} else cout<<"-"<<endl<<"stop"<<endl;
	return 0;
} 

10.L1-100 四项全能

#include<iostream>
#include<iomanip>
#include<vector>
#include<cmath>
#include<utility>
#include<algorithm>

//#include<sstream>
//#include<cctype>

using namespace std;

int n,m,tmp,sum = 0;
vector<int> person_num;

signed main(){
	cin>>n>>m;
	for(int i=0;i<m;i++) {
		cin>>tmp;
		sum +=tmp;
	}
	int k = sum / n; // 最大值为m
	if (k>= m-1) {
		cout<<sum - n*(m-1)<<endl;
	} else cout<<0;
	
	return 0;
} 


网站公告

今日签到

点亮在社区的每一天
去签到