首页 > 学院 > 开发设计 > 正文

洛谷——P1101 单词方阵

2019-11-06 07:58:52
字体:
来源:转载
供稿:网友

题目描述

给一nXn的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red]可以[/color]交叉,因此有可能共用字母。输出时,将不是单词的字母用“*”代替,以突出显示单词。例如:输入: 输出:8qyizhong *yizhonggydthkjy gy******nwidghji n*i*****orbzsfgz o**z****hhgrhwth h***h***zzzzzozo z****o**iwdfrgng i*****n*yyyygggg y******g

输入格式:

第一行输入一个数n。(7<=n<=100)。第二行开始输入nXn的字母矩阵。

输出格式:

突出显示单词的nXn矩阵。

题解:

直接暴力。用数组a读入,假设在某个点是“y”,那么往八个方向扩展6个单位,如果可以扩展,则判断在这个方向上的字符是否为“yizhong”,是则用数组f记录。最后输出,数组f无记录的输出“*”,else输出a[i][j]。

代码: 有点丑啊!!!

#include <cstdio>#include <cstring>using namespace std;int n,f[101][101],kf;char a[101][101];char st[]="yizhong";int main(){ scanf("%d/n",&n); for (int i=1;i<=n;i++) scanf("%s",&a[i]); for (int i=1;i<=n;i++) for (int j=0;j<n;j++) if (a[i][j]=='y') { if (j+6<n) kf=1; else kf=0; if (j+6<n) for (int k=1;k<=6;k++) if (a[i][j+k]!=st[k]) { kf=0; break; } if (kf) for (int k=0;k<=6;k++) f[i][j+k]=1; if (i+6<=n) kf=1; else kf=0; if (i+6<=n) for (int k=1;k<=6;k++) if (a[i+k][j]!=st[k]) { kf=0; break; } if (kf) for (int k=0;k<=6;k++) f[i+k][j]=1; if (j-6>=0) kf=1; else kf=0; if (j-6>=0) for (int k=1;k<=6;k++) if (a[i][j-k]!=st[k]) { kf=0; break; } if (kf) for (int k=0;k<=6;k++) f[i][j-k]=1; if (i-6>0) kf=1; else kf=0; if (i-6>0) for (int k=1;k<=6;k++) if (a[i-k][j]!=st[k]) { kf=0; break; } if (kf) for (int k=0;k<=6;k++) f[i-k][j]=1; if ((i-6>0)&&(j-6>=0)) kf=1; else kf=0; if ((i-6>0)&&(j-6>=0)) for (int k=1;k<=6;k++) if (a[i-k][j-k]!=st[k]) { kf=0; break; } if (kf) for (int k=0;k<=6;k++) f[i-k][j-k]=1; if ((i-6>0)&&(j+6<n)) kf=1; else kf=0; if ((i-6>0)&&(j+6<n)) for (int k=1;k<=6;k++) if (a[i-k][j+k]!=st[k]) { kf=0; break; } if (kf) for (int k=0;k<=6;k++) f[i-k][j+k]=1; if ((i+6<=n)&&(j-6>=0)) kf=1; else kf=0; if ((i+6<=n)&&(j-6>=0)) for (int k=1;k<=6;k++) if (a[i+k][j-k]!=st[k]) { kf=0; break; } if (kf) for (int k=0;k<=6;k++) f[i+k][j-k]=1; if ((i+6<=n)&&(j+6<n)) kf=1; else kf=0; if ((i+6<=n)&&(j+6<n)) for (int k=1;k<=6;k++) if (a[i+k][j+k]!=st[k]) { kf=0; break; } if (kf) for (int k=0;k<=6;k++) f[i+k][j+k]=1; } for (int i=1;i<=n;i++){ for (int j=0;j<n;j++) if (f[i][j]) PRintf("%c",a[i][j]); else printf("*"); printf("/n"); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表