wikioi之1160 蛇形矩阵 之找规律

来源:互联网 发布:淘宝泄露买家信息处罚 编辑:程序博客网 时间:2024/05/16 05:15

题目

找规律模拟蛇形矩阵构造的方法

以输入7为例

  0     1      2     3      4     5       6

 

中心位置的坐标直接为 n/2取整即可得到

然后从中位置开始按照逆时针的方向赋值

水平方向是y  

竖直方向是x

则有第一次 是在起始坐标的基础上做变换

 1、y++ , x--;

 2、y--,y--,  x++,x++;

3、y++,y++y++,  x--,x--,x--;

...

然后模拟这个过程就可以了

最后求得数组变输出边求对角线的和

对角线上的元素有两种情况

1、 i == j;

 2、i + j = n-1;

对应相加即可

另外这里用动态申请了一个二维数组

不是用之前重载一个类的形式

直接用**指针更加方便些

#include <iostream>#include<iomanip>using namespace std;int main(){    int n,x,y;    int count = 1;    int ** num;    bool flag = true;    cin>>n;    num = new int*[n];    for(int i = 0; i < n; i++)        num[i] = new int[n];    x = y = n / 2;    num[x][y] = 1;    for(int i = 1;;)    {        if(flag)        {            for(int j = 0; j < count; j++)            {                i++;                if(i > n*n)break;                y++;                num[x][y] = i;            }            if(i > n*n)break;            for(int j = 0; j < count; j++)            {                i++;                if(i > n*n)break;                x--;                num[x][y] = i;            }            if(i > n*n)break;            flag = !flag;            count++;        }        else        {            for(int j = 0; j < count; j++)            {                i++;                if(i > n*n)break;                y--;                num[x][y] = i;            }            if(i > n*n)break;            for(int j = 0; j < count; j++)            {                i++;                if(i > n*n)break;                x++;                num[x][y] = i;            }            if(i > n*n)break;            flag = !flag;            count++;        }    }    int sum = 0;    for(int i = 0; i < n ; i++)    {        for(int j =0 ; j < n; j++)        {            cout<<num[i][j]<<" ";            //cout<<setw(3)<<num[i][j];            if(i == j || i +j == n -1)sum += num[i][j];        }        cout<<endl;    }    cout<<sum;    for(int i = 0; i < n ; i++)        delete [] num[i];    delete[] num;    return 0;}

总耗时内存占用语言代码6ms            1672kbC++1718B


当然也可以从外向内填数来模拟。。。





0 0
原创粉丝点击