博客
关于我
String- 单词方阵
阅读量:548 次
发布时间:2019-03-09

本文共 2319 字,大约阅读时间需要 7 分钟。

题目:

完整代码如下:

#include
int n;//方阵长度int p,q;//记录起点char b[101];char a[101][101];int book[101][101];char c[] = "yizhong";int next[8][2] = { { 0,1},{ 1,1},{ 1,0},{ -1,-1},{ 0,-1},{ 1,-1},{ -1,0},{ 0,1}};void maching(int x, int y){ int k, i; for (k = 0; k <=8; k++) { int tx = x; int ty = y; int xx = x; int yy = y; for (i=1;i<=6;i++) { tx+=next[k][0]; ty+=next[k][1]; if ((tx<0 || tx>n - 1 || ty<0 || ty>n - 1) || a[tx][ty] != c[i]) break; } if (i == 7) { book[xx][yy] = 1; for (i = 1; i <= 6; i++) { xx += next[k][0]; yy += next[k][1]; book[xx][yy] = 1; } } }}int main(){ scanf("%d", &n); getchar();//吸收回车 for (int i = 0; i < n; i++) { scanf("%s",b); for (int j = 0; j < n; j++) a[i][j] = b[j]; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) if (a[i][j] == c[0]) maching(i, j); } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (book[i][j] == 0) printf("*"); else printf("%c", a[i][j]); } printf("\n"); } return 0;}

题目解析:

一共有8个方向所以我们先找到字符串的起始位点 ‘y’然后以此为基准点便利8个方向

每个方向都需要沿齐方向往下找6个字符,并在找的同时类比原字符串
寻找成功后(for循环自动结束),再以基准点往该方向标记字符位点
输出时,未标记的输出 ‘*’ 标记过的输出原字符串

第一步(读入)

scanf("%d", &n);	getchar();//吸收回车	for (int i = 0; i < n; i++)	{   		scanf("%s",b);//借用一维数组		for (int j = 0; j < n; j++)			a[i][j] = b[j];	}

第二步(寻找起始位点然后去maching)

for (int i = 0; i < n; i++)	{   		for (int j = 0; j < n; j++)			if (a[i][j] == c[0])//char c[] = "yizhong";				maching(i, j); 	}

第三步(maching(匹配)函数内部操作)

void maching(int x, int y){   	int k, i;	for (k = 0; k <=8; k++)//mathing 8 个方向	{   		int tx = x;		int ty = y;		int xx = x;		int yy = y;		//一组用来试探匹配字符串		//一组用来染色(标记)字符串		//目的:保证8个方向的mathing的起始位点不变		for (i=1;i<=6;i++)//每个方向走6步		{   			tx+=next[k][0];			ty+=next[k][1];			if ((tx<0 || tx>n - 1 || ty<0 || ty>n - 1) || a[tx][ty] != c[i])			//判断是否越界且是否与字符串匹配			//不满足条件提前跳出循环				break;		}		if (i == 7)//for循环自动结束(即成功找到)		{   			book[xx][yy] = 1;//标记起始位点			for (i = 1; i <= 6; i++)//标记剩余位点			{   				xx += next[k][0];				yy += next[k][1];				book[xx][yy] = 1;			}		}	}}

第四步(输出)

for (int i = 0; i < n; i++)	{   		for (int j = 0; j < n; j++)		{   			if (book[i][j] == 0)				printf("*");			else				printf("%c", a[i][j]);		}		printf("\n");	}

重点部分(2):

①读入:用一维数组导入二维数组(前不能有回车符号)
②起点保存两组(保证8个方向的mathing的起始位点不变)

END

转载地址:http://vvzsz.baihongyu.com/

你可能感兴趣的文章
Nginx反向代理
查看>>
nginx反向代理、文件批量改名及统计ip访问量等精髓总结
查看>>
Nginx反向代理与正向代理配置
查看>>
Nginx反向代理及负载均衡实现过程部署
查看>>
Nginx反向代理和负载均衡部署指南
查看>>
Nginx反向代理是什么意思?如何配置Nginx反向代理?
查看>>
nginx反向代理解决跨域问题,使本地调试更方便
查看>>
nginx反向代理转发、正则、重写、负摘均衡配置案例
查看>>
Nginx反向代理配置
查看>>
Nginx启动SSL功能,并进行功能优化,你看这个就足够了
查看>>
nginx启动脚本
查看>>
Nginx在Windows上和Linux上(Docker启动)分别配置基本身份认证示例
查看>>
Nginx在Windows下载安装启动与配置前后端请求代理
查看>>
Nginx在开发中常用的基础命令
查看>>
Nginx多域名,多证书,多服务配置,实用版
查看>>
nginx如何实现图片防盗链
查看>>
Nginx学习总结(11)——提高Nginx服务器的安全性,稳定性和性能的12种技巧
查看>>
Nginx学习总结(12)——Nginx各项配置总结
查看>>
Nginx学习总结(13)——Nginx 重要知识点回顾
查看>>
Nginx学习总结(14)——Nginx配置参数详细说明与整理
查看>>