题解 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~

猜你喜欢

转载自www.cnblogs.com/oierscw/p/12542206.html