2518: 【普及-】【P1101】单词方阵
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:12
解决:5
题目描述
给一 的字母方阵,内可能蕴含多个 yizhong
单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用 *
代替,以突出显示单词。例如:
输入: 8 输出:
qyizhong *yizhong
gydthkjy gy******
nwidghji n*i*****
orbzsfgz o**z****
hhgrhwth h***h***
zzzzzozo z****o**
iwdfrgng i*****n*
yyyygggg y******g
输入
第一行输入一个数 。()。
第二行开始输入 的字母矩阵。
输出
突出显示单词的 矩阵。
样例输入 复制
7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
样例输出 复制
*******
*******
*******
*******
*******
*******
*******
提示
#include<bits/stdc++.h> using namespace std; int n,mark[105][105]={0},dx[8]={0,-1,-1,-1,0,1,1,1},dy[8]={-1,-1,0,1,1,1,0,-1}; char fz[105][105]={0}; string yz="yizhong"; void search(int x,int y) { for(int i=0;i<8;i++) { int tx,ty,m=1; for(int j=0;j<yz.size();j++) { tx=x+j*dx[i]; ty=y+j*dy[i]; if(fz[tx][ty]!=yz[j]) { m=0; break; } } if(m==0) continue; for(int j=0;j<yz.size();j++) { mark[x+j*dx[i]][y+j*dy[i]]=1; } } } int main(){ cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>fz[i][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { search(i,j); } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(mark[i][j]) cout<<fz[i][j]; else cout<<"*"; } cout<<endl; } return 0; }