3361:【例62.3】 地雷数计算
3362:练62.1 矩形的下三角
3363:练62.2 矩阵乘法
3364:练62.3 学习效率
3365:【例63.1】 蛇形填数
/*
2045:【例5.13】蛇形填数--AC(2021.07.25)
http://ybt.ssoier.cn:8088/problem_show.php?pid=2045
NOIP1995 普及组复赛第2题 方阵填数
https://blog.csdn.net/WDAJSNHC/article/details/79381876
例5.13 蛇形填数
在n*n方阵里填入1,2,3,…,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出,n<=8。
【分析】:
类比数学中的矩阵,我们可以用一个所谓的二维数组来储存题目中的方阵。
只需声明一个int a[MAXN][MAXN],就可以获得一个大小为MAXN×MAXN的方阵。
在声明时,两维的大小不必相同,因此也可以声明int a[30][50]这样的数组,
第一维下标范围是0,1,2,…,29,第二维下标范围是0,1,2,…,49。
让我们从1开始依次填写。设“笔”的坐标为(x,y),则一开始x=0,y=n-1,
即第0行,第n-1列(别忘了行列的范围是0到n-1,没有第n列)。
“笔”的移动轨迹是:下,下,下,左,左,左,上,上,上,右,右,下,下,左,
上。总之,先是下,到不能填了为止,然后是左,接着是上,最后是右。
“不能填”是指再走就出界(例如4→5),
或者再走就要走到以前填过的格子(例如12→13)。
如果我们把所有格子初始为0,就能很方便地加以判断。
*/
#include <cstdio>
#include <cstring>
#define MAXN 30
int a[MAXN][MAXN];
int main()
{
int n,x,y,tot=0;
scanf("%d",&n);
memset(a,0,sizeof(a));
tot=a[x=0][y=n-1]=1; //起始的位置从1开始
//a[x=0][y=n-1]=1;
//x=0;y=n-1; a[x][y]=1;
//tot=1;
while (tot<n*n)
{
while (x+1<n && !a[x+1][y]) a[++x][y]=++tot;
while (y-1>=0 && !a[x][y-1]) a[x][--y]=++tot;
while (x-1>=0 && !a[x-1][y]) a[--x][y]=++tot;
while (y+1<n && !a[x][y+1]) a[x][++y]=++tot;
}
for(x=0;x<n;++x)
{
for (y=0;y<n;++y)
{
printf("%d ",a[x][y]);
}
printf("\n");
}
return 0;
}
/*
【说明】:
这段程序充分利用了C++语言简洁的优势。
首先,赋值x=0和y=n-1后马上要把它们作为a数组的下标,
因此可以合并完成;tot和a[0][n-1]都要赋值1,也可以合并完成。
这样,我们用一条语句完成了多件事情,而且并没有牺牲程序的可读性,
这段代码的含义显而易见。
那4条while语句有些难懂,不过十分相似,因此只需介绍其中的第一条:不断向下走,
并且填数。
我们的原则是:先判断,再移动,而不是走一步以后发现越界了再退回来。
这样,我们需要进行“预判”,即是否越界,
以及如果继续往下走会不会到达一个已经填过的格子。
越界只需判断x+1<n,因为y值并没有修改;下一个格子是(x+1,y),因此只需a[x+1][y]==0,简写成!a[x+1][y](其中!是“逻辑非”运算符)。
细心的读者也许会发现这里的一个“潜在bug”;如果越界,x+1会等于n,a[x+1][y]将访问非法内存!幸运的是,这样的担心是不必要的。&&是短路运算符。如果x+1<n为假,将不会计算!a[x+1][y],也就不会越界了。
至于为什么是++tot而不是tot++,留给读者思考。
*/
1032.练习6:蛇形矩阵4(课程ZA)
1033.(课程zb)例1:缺席多少人
#include <bits/stdc++.h>
using namespace std;
int n,m,a[105][105],b[105],t=0;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
b[i]=t;
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]==0) t+=1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<b[i]<<" ";
}
cout<<endl;
}
return 0;
}
772.A
773.B
774.C
三角形四心之外心的性质与证明
基本不等式的演示3D版(GeoGebra)
带有复数的三角函数怎么求?
三大宇宙速度:脱离地球和太阳引力的束缚
无穷大有大小吗?
小学生和初中生的区别
如何学好数列,18种题型超全概括总结
挑战小学数学题:数学为何如此神奇?计算逻辑会颠覆你的认知
弦图求阴影面积
和角公式,12345模型,一线三垂直
一二年级的孩子来试试吧,逆向思维
基本不等式无字证明!绝妙数形结合!
复导数可视化
看完这个视频,秒懂阿氏圆