P4470 [BJWC2018]售票

https://www.luogu.com.cn/problem/P4470
涉及知识点:模拟,字符串,枚举暴力
橙色题
思路:
  • 先输入n个,目的地名称,再输入已经输进去的字母
  • 然后对于每一个输入进去的字母都进行判断是否和目的地一致(只要有一个不一样就做标记,在最后搜索时跳过)
  • 对于每一个目的地,只要没被做过标记那么他的没输入的下一个字母就在输出的表数组上记录
  • 最后输出一个表

注:需特别注意最后的换行顺序,本题只需认真模拟就可以做出来。


 

代码:

#include<bits/stdc++.h> using namespace std; int n,a[51],l; char b[51][101]; char s[101]; char m[33]; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>b[i];//输入每个字符串 a[i]=1;//后面判断是否符合条件 } cin>>s;//输入已经输入的字符串 l=strlen(s);//数一下输入了几个数据 for(int i=0;i<l;i++){//对于每一个字母判断 for(int j=1;j<=n;j++){ if(a[j]==1&&b[j][i]!=s[i])a[j]=0;//如果不相符那么a变成0,a为0以后就不搜索了 } } for(int i=1;i<=32;i++){//m[32]代表要输出的4*8的表格 m[i]='*';//先都赋值为* } for(int i=1;i<=n;i++){//对每一个输入都进行判断 if(a[i]==1)m[b[i][l]-61]=b[i][l];//如果所有字符都符合那么应该a为1, //如果a为1那么他和数据一直相符,将下一位的字母存进m函数里 } for(int i=1;i<=32;i++){//输出表格 cout<<m[i]; if(i%8==0)cout<<endl;//只要是8的倍数就换行 } return 0; }

 

 

 b[i][l]-61


 

方法二:

#include <cstdio> #include <cstring> short n,l; char a[51][101],s[101],k[]={"********\n********\n********\n********"};//省的换行 int main(void){ scanf ("%d\n",&n); for (short i=0;i<n;i++)scanf ("%s\n",&a[i]); scanf ("%s",s),l=strlen(s); for (short i=0;i<n;i++)if (!strncmp(a[i],s,l)){//比较 char c=a[i][l]; if('A'<=c&&c<='E')k[c-'A'+3]=c; if('F'<=c&&c<='M')k[c-'A'+4]=c; if('N'<=c&&c<='U')k[c-'A'+5]=c; if('V'<=c&&c<='Z')k[c-'A'+6]=c;//设置为可见 } puts(k);//直接输出 }

strncmp,可以直接比较两个字符串的前n位

 

 


__EOF__

本文作者灰の魔女伊蕾娜
本文链接https://www.cnblogs.com/2elaina/p/16445485.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -イレイナ  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示