当前位置: 首页 > news >正文

PTA天梯赛L1 041-050题目解析

目录

1.L1-041 寻找250

2.L1-042 日期格式化

3.L1-043 阅览室

4.L1-044 稳赢

5.L1-045 宇宙无敌大招呼

6.L1-046 整除光棍

7.L1-047 装睡

8.L1-048 矩阵A乘以B

9.L1-049 天梯赛座位分配

10.L1-050 倒数第N个字符串


1.L1-041 寻找250

#include<iostream>using namespace std;int coun=0;
int nums;
signed main(){while(cin>>nums){coun++;if (nums==250) {cout<<coun;break;}}return 0;
}

2.L1-042 日期格式化

#include<iostream>
#include<cstdio>
using namespace std;
// mm-dd-yyyy  => yyyy-mm-ddint year,mouth,day;signed main(){scanf("%d-%d-%d",&mouth,&day,&year);printf("%04d-%02d-%02d",year,mouth,day);return 0;
}

3.L1-043 阅览室

分析:

注意理解题目给出的示例,这里的“即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。”实际含义是:

当同一本书,多次借,一次还时,应该按最后一次借书算。

一次借,多次还时,按第一次还算。

#include<iostream>
#include<iomanip>
#include<cstdio> 
using namespace std;int n;int num,hour,minute;
char op;int sum=0,sumTotal=0;struct sss{int SHour;int SMinute;bool check;
};inline int calc(int hour1,int minute1,int hour2,int minute2){return hour2*60+minute2-(hour1*60+minute1);
} 
// 真他妈傻鸟 
// 当同一本书,多次借,一次还时,应该按最后一次借书算。
// 借书 
void borrowBook(struct sss* ttt,int num,int hour,int minute){
//	if (ttt[num].check==true) return;ttt[num].SHour=hour;ttt[num].SMinute=minute;ttt[num].check=true;
}
// 一次借,多次还时,按第一次还算。
// 还书 
void returnBook(struct sss* ttt,int num,int hour,int minute){if (ttt[num].check!=true) return ;// 注意 一天可能被借出多次	sum+=calc(ttt[num].SHour,ttt[num].SMinute,hour,minute);ttt[num].check=false;sumTotal++;
}void settlement(){if (sumTotal==0) cout<<sumTotal<<" "<<sum<<endl;else cout<<sumTotal<<" "<<fixed<<setprecision(0)<<1.0*sum/sumTotal<<endl;
//	if (sum==0) printf("%d %.0lf\n",sumTotal,0);
//	else printf("%d %.0lf\n",sumTotal,1.0*sum/sumTotal);
}signed main(){cin>>n;for(int i=0;i<n;i++){struct sss ttt[1010];sum=0;sumTotal=0;while(1){scanf("%d %c %d:%d",&num,&op,&hour,&minute);if (num==0){settlement();break;}if (op=='S'){borrowBook(ttt,num, hour, minute);}else if (op=='E'){returnBook(ttt,num, hour, minute);}}}return 0;
} // 一次借,多次还时,按第一次还算。
/*1
1 S 00:00
1 E 01:59
1 E 02:00
0 S 03:00*/
// => 1 119/*1
1 S 00:00
1 S 10:00
2 S 11:00
1 E 11:00
1 S 12:00
1 S 13:00
1 E 14:00
0 S 15:00=> 2 60
*/

4.L1-044 稳赢

#include<iostream>
#include<map>
using namespace std;int k,coun;
string s;map<string,string> mymap;
// ChuiZi Bu JianDao
void init(){mymap["ChuiZi"]="Bu";mymap["Bu"]="JianDao";mymap["JianDao"]="ChuiZi";
}
signed main(){cin>>k;init();while(1){cin>>s;if (s=="End") break;if (coun==k){cout<<s<<endl;coun=0;}else {cout<<mymap[s]<<endl;coun++; }}return 0;
} 

5.L1-045 宇宙无敌大招呼

#include<iostream>using namespace std;string s;
signed main(){cin>>s;cout<<"Hello "<<s<<endl;return 0;
} 

6.L1-046 整除光棍

分析:

如果有,num=q⋅x+r,那么(num⋅10+1)% x = (r⋅10+1)modx

所以只需要保存每一步的余数,然后将余数r*10 + 1获得最终余数就可以得到需要多少位光棍了

#include<iostream>
#include<vector>
using namespace std;
int x,num=1;
int coun=1;
int addCount=0; 
vector<int> res;
inline void addNum(int& num){coun++;num= num*10+1;
//	cout<<"当前num"<<num<<endl;
}inline void print(){int i;
//	for (i=0;;i++){
//		if (res[i]==0) continue;
//		else break;
//	}for( i=0;i<res.size();i++){cout<<res[i];}cout<<" ";
}
signed main(){cin>>x;while(num<x){addNum(num); }while(1){if (num%x==0) {// 这里之前直接push 0了 笨死了 res.push_back(num/x);break;}res.push_back(num/x);num%=x;addNum(num);}print();cout<<coun<<endl;return 0;}

7.L1-047 装睡

#include<iostream>using namespace std;int n;string name;
int a,b;bool check(int& a,int& b){if (15<=a && a<=20 && 50<=b && b<=70) return true;return false;
}
signed main(){cin>>n;for(int i=0;i<n;i++){cin>>name>>a>>b;if (!check(a,b)){cout<<name<<endl;}}	return  0;
} 

8.L1-048 矩阵A乘以B

#include<iostream>using namespace std;int lena1,lena2;
int lenb1,lenb2;int size1,size2;
//template<int n,int m>
//void printMatrix(int (&arr1)[n][m],int (&arr2)[n][m]){
//	
//}const int MAX=110;
int arr1[MAX][MAX];
int arr2[MAX][MAX];int res[MAX][MAX];inline int calc(int (&arr1)[MAX][MAX],int len1,int (&arr2)[MAX][MAX],int len2,int size){int res=0;for(int j=1;j<=size;j++){res+=arr1[len1][j]*arr2[j][len2];}return res;
}
void printMatrix(int (&arr1)[MAX][MAX],int lena1,int (&arr2)[MAX][MAX],int lena2,int size){for(int i=1;i<=lena1;i++){for(int j=1;j<=lenb2;j++){res[i][j] = calc(arr1,i,arr2,j,size);if (j-1) cout<<" ";cout<<res[i][j];}cout<<endl;}}
signed main()
{cin>>lena1>>lena2;for(int i=1;i<=lena1;i++){for(int j=1;j<=lena2;j++){cin>>arr1[i][j];}}cin>>lenb1>>lenb2;	for(int i=1;i<=lenb1;i++){for(int j=1;j<=lenb2;j++){cin>>arr2[i][j];}}if (lena2!=lenb1){cout<<"Error: "<<lena2<<" != "<<lenb1<<endl;}else {cout<<lena1<<" "<<lenb2<<endl;printMatrix(arr1,lena1,arr2,lenb2,lena2);}return  0;} 

9.L1-049 天梯赛座位分配

分析:

使用二维vector my_vec来保存每位队员,然后根据座位号二维vector res分配到对应的数组,根据最大长度进行索引,中间如果检测到分配到的序号是连续的,则+1保持间隔。最后注意条件,合理打印格式。

#include<iostream>
#include<iomanip>
#include<algorithm> 
#include<cmath> 
#include<vector> using namespace std;int school_num;
vector<vector<int> > my_vec,res;
vector<int>  size_vec;
int num;int site_num =1;// 座位编号 从1开始 
signed main(){cin>>school_num;for(int i=0;i<school_num;i++) {cin>>num;my_vec.push_back(vector<int>(num*10,0));res.push_back(vector<int>(0,0));}
//	cout<<"DEBUG1"<<endl; for(auto it:my_vec) size_vec.push_back(it.size());int max_len = *max_element(size_vec.begin(),size_vec.end());int current_index = 0; // 循环变量//	cout<<"DEBUG2"<<endl;for(current_index = 0; current_index<max_len; current_index++) { 
//		cout<<"LOOP1"<<endl;for(int i=0;i<my_vec.size();i++) {
//			cout<<"LOOP2"<<endl;if (my_vec[i].size() > current_index) {// 如果是紧接着分配了,需要隔一个位置  注意:vector为空时不能使用back操作 if (!res[i].empty() && res[i].back() + 1 == site_num) site_num++;// 给这些队伍分配座位 res[i].push_back(site_num);site_num++;} }}
//	cout<<"DEBUG3"<<endl;for(int i=0;i<res.size();i++) {cout<<"#"<<i+1<<endl;for(int j=0;j<res[i].size();j++) {if (j%10 && j%10 != 0) cout<<" ";cout<<res[i][j];if ((j+1)%10 == 0) cout<<endl;} 
//		cout<<endl;} 
//	cout<<"DEBUG4"<<endl;return 0;
} 

10.L1-050 倒数第N个字符串

#include <bits/stdc++.h>using namespace std;typedef long long int ll;int a[1000010];
int main() {ll n,nums;cin>>n>>nums;nums=pow(26,n)-nums;for(int i=0;i<nums;i++){a[i]=nums%26;nums/=26;}for(int i=n-1;i>=0;i--) cout<<(char)('a'+a[i]);// cout<<str<<endl;return 0;
}

相关文章:

  • 239. 滑动窗口的最大值
  • C语言:指针进阶(下)
  • 从代码学习深度学习 - 全局向量的词嵌入(GloVe)PyTorch版
  • codeforces C. Devyatkino
  • 建筑末端配电回路安全用电解决方案:筑牢电气防火最后一道防线
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio搭建AnythingLLM聊天助手
  • 边缘计算一:现代前端架构演进图谱 —— 从 SPA 到边缘渲染
  • 【大模型训练】中短序列attention 和MOE层并行方式(二)
  • 深度剖析:UI 设计怎样为小程序构建极致轻量体验
  • 从0到1掌握Sqoop:开启大数据迁移之旅
  • Kivy的ButtonBehavior学习
  • java面向对象高级部分
  • day6补 cpp:c++输入输出流,流的四种状态,标准输入输出流
  • CUDA 与 cuDNN 免登录下载政策详解(基于官方权威信息)
  • 软件确认测试报告:如何评估软件功能及测试关键点?
  • Java并发编程实战 Day 17:CompletableFuture高级应用
  • 爬虫+动态代理助力 AI 训练数据采集
  • QT绘制会动的蚂蚁线
  • AI服务代码说明文档
  • STM32学习之不同FLASH的芯片启动文件选择规则
  • 三只松鼠网站怎样做/网络营销课程培训课程
  • 深圳购物网站建设/营销策略怎么写范文
  • 全屋定制十大品牌/企业关键词优化专业公司
  • 有做ppt的兼职网站吗/软文广告范例大全
  • 如何做网站么/百度个人中心登录
  • crm管理系统功能/seo的方式包括