题解 P4470 【[BJWC2018]售票】

这题的主要思想还是 暴力 模拟,加上一点字符串技巧~

有个字符串函数叫做strncmp(我翻了好久的书才翻到,然而写题解前一看,已经有人这么做了QAQ),有三个参数,分别是两个字符数组和一个比较长度,用法是strncmp(char a[],char b[],int l)它是用来比较字符串a和b前l个字符是否相同;

类似于这个:

if(a>b) return 1;
else if(a==b) return 0;
else if(a<b) return -1;

Pascal是这个:

if a>b exit(1)
else if a=b exit(0)
else if a<b exit(-1);

所以,我们只要判断返回值是不是0就行了。

哦,对了,这里还有一个找规律的方法:

对于大写字母c,有

x坐标=(c-65)%8+3;(ord(c)mod 8+3)

y坐标=(c-65)/8;(ord(c) div 8)

这个对于往键盘上填数有帮助。

代码如下

#include<bits/stdc++.h> 
using namespace std;
int main()
{
	char x[60][200],p[200];
	int n;
	char ans[4][8];
	memset(ans,'*',sizeof(ans));
	cin>>n;
	for(int i=0;i<n;i++) cin>>x[i];
	cin>>p;
	int l=strlen(p);
	for(int i=0;i<n;i++)
	{
		if(strncmp(p,x[i],l)==0)
		{
			int k=x[i][l]-65;
			int a=k%8+3;
			int b=k/8;
			ans[b][a]=x[i][l];
		}
	}
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<8;j++)
		cout<<ans[i][j];
		cout<<endl; 
	}
	return 0; 
}

代码不长,思路简单,886~

原文地址:https://www.cnblogs.com/oierscw/p/12542206.html