11月25日学习小结

2021/11/25 23:40:06

本文主要是介绍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日学习小结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程