2022/1/13学习总结
2022/1/13 23:34:09
本文主要是介绍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个链表的题(以前写过,算是复习吧)。
这篇关于2022/1/13学习总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南