zoukankan      html  css  js  c++  java
  • 洛谷——P1101 单词方阵

    题目描述

    给一nXn的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,
    单词与单词之间[color=red]可以[/color]交叉,因此有可能共用字母。输出时,将不是单词的字母用“*”代替,以突出显示单词。例如: 输入: 输出: 8 qyizhong *yizhong gydthkjy 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);
        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("
    ");
        }
        return 0;
    }
  • 相关阅读:
    Unique Encryption Keys 暴力学习map,vector 函数
    hdu 1250 Hat's Fibonacci
    匈牙利算法模板 图的二分匹配 hdu 2063 过山车
    hdu 4260 汉诺塔问题 The End of The World
    各种常见文件的hex文件头
    Ubuntu & node.js
    Linux周期性任务的执行指令配置
    MySQL各版本的性能特性(从4.0版本开始)
    Tsung 1.5.0 增加对 WebSocket 和 BOSH 的支持
    ShowSlow+Yslow环境搭建
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319509.html
Copyright © 2011-2022 走看看