11月25日学习小结
作者:互联网
1.没有太多的时间留给我去抱怨,可今天的收获是真的很小,程序设计基础有实验题要做,计算机基础课程也有作业,没有留出足够的时间来刷题,学长今天讲了两道题,但我也只是听懂了一半一半,还没有完全消化,但我好在还是提交过了两道题。
蛇形填数:(H - 蛇形填数)
例题如下:
在 n×n 方阵里填入 1,2, \cdots ,n \times n1,2,⋯,n×n,要求填成蛇形。例如 n=4 时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入格式
直接输入方陈的维数,即 n*n 的值。(n \le 100n≤100)
输出格式
输出结果是蛇形方阵。
Sample Input
3
Sample Output
7 8 1 6 9 2 5 4 3
解题思路如下:
这道题的规律在于数字递加且先向下再向左,再向上,最后向右,依次循环填数,但如果地址值非零则不需要填,所以代码如下:
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[100][100]={0};
int n,sum=0;
scanf("%d",&n);
int x=0,y=n-1;
a[x][y] = ++sum;
while(sum<n*n){ //最后的值肯定为n*n所以以此为填数结束条件
while(x+1<n&&!a[x+1][y]) a[++x][y] = ++sum;//刚进入时x=0,y=n-,sum=1;
while(y-1>-1&&!a[x][y-1]) a[x][--y] = ++sum;//刚进入时x=n,y=0,sum = n;
while(x-1>-1&&!a[x-1][y]) a[--x][y] = ++sum;//刚进入时x=n,y=0,sum = 2n;
while(y+1<n&&!a[x][y+1]) a[x][++y] = ++sum; //刚进入时x=0,y=1,sum = 3n
}
for(int i=0;i<n;i++){
for(int j = 0;j<n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
这道题主要有两个填数条件需要考虑与判断,也是思考此类问题的难点吧。
例x+1是否在数组内有合法内存,a[x+1][y]该数是否非零。
标签:11,25,int,sum,填数,蛇形,100,include,小结 来源: https://blog.csdn.net/ds88888888/article/details/121549891