20170809

xiaoxiao2021-02-28  18

重操旧业也有一个月了,确实要写点什么总结一下这咸鱼的一个月……

经过一个月的好(hun)好(shui)学(mo)习(yu),转语言应该是差不多了,虽然也是因为原本pascal就没学得多深入,这方面还算顺利。以前学过的编程的基本思路也慢慢熟悉起来,抽象一点说就是开始有点状态了。但是问题也很明显,非常明显。……

我太浮躁了。而且急功近利。

这两次模拟可能不能反应全部问题,但是有些方面也不能避免地暴露。在日常总结里无数次和自己强调的注意数据范围,仍然没有周全地考虑,一不小心就超。平时刷题不够安心…………说再多也没什么实际意义,希望以后能静下来吧。

关于进度。

基础操作还是有些不熟练的,尤其关于字符这一块。数据结构和算法以前基本白学,要从头打基础。

今天的打卡。

一开始的蛇形矩阵。

#include<bits/stdc++.h> using namespace std; int a[100][100]={}; int main() { int n,i=0,j,s=1; scanf("%d",&n); j=n-1; a[i][j]=1; while(s<n*n) { while((a[i][j+1]==0)&&(j+1<n)) a[i][++j]=++s; while((a[i+1][j]==0)&&(i+1<n)) a[++i][j]=++s; while((a[i-1][j]==0)&&(i>=1)) a[--i][j]=++s; while((a[i][j-1]==0)&&(j>=1)) a[i][--j]=++s; } for(i=0;i<n;++i) { for(j=0;j<n;++j)printf("=",a[i][j]); printf("\n"); } return 0; } 其实还是挺简单的,主要是边缘换方向的考虑…c++的语言真的很自由灵活,只有我想不到的……比如“i++”可以放在坐标里执行,好神奇啊……

luogu2239螺旋矩阵。

#include<bits/stdc++.h> using namespace std; int main() { long long s=0; int n,x,y,i1,j1,i2,j2; bool flag; scanf("%d%d%d",&n,&x,&y); i1=1;j1=n;i2=n;j2=1;//从最外圈开始处理 flag=false; while(flag==false) { if(i1!=x) s=s+j1-j2;else { s=s+y-j2+1;break; }//如果不在这一行就直接算出这一行最后 if(j1!=y) s=s+i2-i1;else { s=s+x-i1+1;break; }//同上 if(i2!=x) s=s+j1-j2;else { s=s+j1-y+1;break; }//同上 if(j2!=y) s=s+i2-i1;else { s=s+i2-x+1;break; }//同上 i1++;j1--;i2--;j2++;把圈往内缩一圈 } printf("%lld",s); return 0; } 先让我兴奋一下,终于写完了………………!!!

n范围很大,写到一半才发现会超,因为这道题只要求输出指定位置,所以中间值是不用储存的,参考了洛谷上的题解。

比如n=4:

1   2    3  4

12 13 14 5

11 16 15 6

10 9    8  7

一开始不懂直接算到结尾的时候为什么只算到转折点前一个,后来发现是包括开头不包括结尾。想通是因为代数据简单地算了一下,这样很容易想明白,而我之前盯电脑屏幕删删改改半小时简直是事倍功半……

虽然一晚上只做了这一道,但是有种迷之充实感。

惯例鸡汤,希望自己加油……

转载请注明原文地址: https://www.6miu.com/read-250101.html

最新回复(0)