2022/1/13学习总结

学习目录

1.背英语4级词汇2小时

2.刷题

3.尝试修改没有AC的题目并使其AC

4.复习链表相关知识

刷题

1.

P1101 单词方阵

题目描述

给一n \times nn×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 88 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词。例如:

输入:
    8                     输出:
    qyizhong              *yizhong
    gydthkjy              gy******
    nwidghji              n*i*****
    orbzsfgz              o**z****
    hhgrhwth              h***h***
    zzzzzozo              z****o**
    iwdfrgng              i*****n*
    yyyygggg              y******g

输入格式

第一行输入一个数nn。(7 \le n \le 1007≤n≤100)。

第二行开始输入n \times nn×n的字母矩阵。

输出格式

突出显示单词的n \times nn×n矩阵。

输入输出样例

输入 #1复制

7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa

输出 #1复制

*******
*******
*******
*******
*******
*******
*******

输入 #2复制

8
qyizhong
gydthkjy
nwidghji
orbzsfgz
hhgrhwth
zzzzzozo
iwdfrgng
yyyygggg

输出 #2复制

*yizhong
gy******
n*i*****
o**z****
h***h***
z****o**
i*****n*
y******g
#include<stdio.h>
int n,k,m;
char a[105][105],b[105][105];//a用于存储输入的字符坐标系,b用于存放处理后需要输出的字符 
int dx[8]={1,-1,0,0,1,-1,-1,1};
int dy[8]={0,0,1,-1,1,1,-1,1};
void dfs(int x,int y,int z)
{
    int tx=x+dx[z];//移动后的位置 
    int ty=y+dy[z];
	if(k>=7)
	{
        m=1;
        return;
    }
    if(tx<0||tx>=n||ty<0||ty>=n)
        return;
    if((a[x][y]=='y'&&a[tx][ty]=='i')||(a[x][y]=='i'&&a[tx][ty]=='z')||(a[x][y]=='z'&&a[tx][ty]=='h')||(a[x][y]=='h'&&a[tx][ty]=='o')||(a[x][y]=='o'&&a[tx][ty]=='n')||(a[x][y]=='n'&&a[tx][ty]=='g'))
	{
        k++;
        dfs(tx,ty,z);
        if(!m)//如果不能构成'yizhong'字符串就结束 
            return;
        b[tx][ty]=a[tx][ty];
    }
    return;
}

int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%s",a[i]);//输入每行字符串
	for(int i=0;i<=104;i++)
    	for(int j=0;j<=104;j++)
    	b[i][j]='*';//默认为不能输出 
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(a[i][j]=='y')//首字母出现,开始后续判断 
                for(int l=0;l<8;l++)
				{
                    k=1,m=0;//开始判断 
                    if(a[i+dx[l]][j+dy[l]]=='i')//判断每一个方向
                        dfs(i,j,l);
                    if(m)//如果满足条件,就把最后一个'y'放到b[i][j]中
                        b[i][j]='y';//最后把'y'
                }
    for(int i=0;i<n;i++)
	{
        for(int j=0;j<n;j++)
            printf("%c",b[i][j]);
        printf("\n");
    }
    return 0;
}

题解:首先,单词开头的字母是y,那就把这个当做一个判定条件,若在遍历的过程中发现了y,那就开始对其周围的字母进行搜索,并一个接一个对着单词里的字母进行搜索,最后输出。

2.

P1162 填涂颜色

题目描述

由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向。现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6),涂色前和涂色后的方阵如下:

0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1

输入格式

每组测试数据第一行一个整数n(1 \le n \le 30)n(1≤n≤30)

接下来nn行,由00和11组成的n \times nn×n的方阵。

方阵内只有一个闭合圈,圈内至少有一个00。

//感谢黄小U饮品指出本题数据和数据格式不一样. 已修改(输入格式)

输出格式

已经填好数字22的完整方阵。

输入输出样例

输入 #1复制

6
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1

输出 #1复制

0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1

说明/提示

1 \le n \le 301≤n≤30

#include<stdio.h>
int a[100][100],b[100][100];
int dx[5]={0,-1,1,0,0};
int dy[5]={0,0,0,-1,1};//第一个表示不动,后面的四个分别是上下左右四个方向
int n;

void dfs(int x,int y) 
{
    int i;
    if (x<0||x>n+1||y<0||y>n+1||a[x][y]!=0)
	return;//
    a[x][y]=1;//染色
    for(i=1;i<=4;i++)
	dfs(x+dx[i],y+dy[i]);//向四个方向搜索
}

int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
		{
            scanf("%d",&b[i][j]);
            if(b[i][j]==0)
			a[i][j]=0;
            else
			a[i][j]=2;
        }
    dfs(0,0);
    for (int i=1;i<=n;i++)
	{
        for (int j=1;j<=n;j++)
        if (a[i][j]==0)
		printf("2 ");
        else
		printf("%d ",b[i][j]);
        printf("\n");
    }
}

题解:第一次交的时候发现如果在遇到三边是1而有一边是空的时候,也会将其判断为染色区域,于是修改后AC。

总结:今天还补了另外2道题(补完任务就能达标),但还是不能AC,正在写一道题(流星雨),但样例输入不正确,可能是思路有误,明天和同学交流一下看看能否解决,今天复习了链表的相关知识,刷了2个链表的题(以前写过,算是复习吧)。

上一篇:QT软件开发之基础控件--2.1.6 buttonBox按钮盒


下一篇:html form button 点击提交表单问题