读书人

模拟 来型矩阵 zstu-3897

发布时间: 2012-12-16 12:02:32 作者: rapoo

模拟 回型矩阵 zstu-3897

题目链接:

http://acmpj.zstu.edu.cn/JudgeOnline/showproblem?problem_id=3897

题目意思:

要求输出一个n*m 的矩阵,规则:按照回型的方式依次录入元素1—n*m,先从左到右,再从上到下,然后从右到左,然后从下到上,一直循环下去,直到所有的数都输入完了。

解题思路:

设置一个变量p计数外圈回型数量,由外及内依次录入元素,当录入元素个数为n*m时,停止录入。

为了统一处理,在录入每一个回型圈时,每个方向均录入元素个数比当前矩阵规模少一。具体详见代码.

代码:

#include<iostream>#include<cmath>#include<cstdio>#include<cstdlib>#include<string>#include<cstring>#include<algorithm>#include<vector>#include<map>#define eps 1e-6#define INF (1<<20)#define PI acos(-1.0)using namespace std;int save[120][120];int main(){    int m,n;    while(scanf("%d%d",&n,&m)!=EOF)    {        int p=1,num=0,sum=n*m,flag=0;  //sum为总个数        while(true)        {            //从左向右            for(int j=p;j<=m-p;j++)            {                num++;                save[p][j]=num;                if(num==sum) //结束                {                    flag=1;                    break;                }            }            if(flag==1)                break;            //从上向下            for(int i=p;i<=n-p;i++)            {                num++;                save[i][m-p+1]=num;                if(num==sum)                {                    flag=1;                    break;                }            }            if(flag==1)                break;            //从右向左            for(int j=m-p+1;j>p;j--)            {                num++;                save[n-p+1][j]=num;                if(num==sum)                {                    flag=1;                    break;                }            }            if(flag==1)                break;            //从下向上            for(int i=n-p+1;i>p;i--)            {                num++;                save[i][p]=num;                if(num==sum)                {                    flag=1;                    break;                }            }            if(flag==1)                break;            p++;        }        for(int i=1;i<=n;i++)        {            printf("%2d",save[i][1]);            for(int j=2;j<=m;j++)                printf("%3d",save[i][j]);            putchar('\n');        }    }    return 0;}


读书人网 >编程

热点推荐