码迷,mamicode.com
首页 > 编程语言 > 详细

noip201403螺旋矩阵【普及组】数学算法

时间:2015-11-27 16:47:17      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

思路如下:

1.输入n>>a>>b;

2.用一个循环缩小范围求出a,b所示的数所在的圈数q;

3.再一个循环求出圈数q的第1个数的值sum;

4.用四个if判断a,b所示的数在本圈q的上或下或左或右;

5.根据位置求出t(在sum的基础上需要+的值)

6.输出<<sum+t;

代码如下: 

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int n,a,b,i,j,q=0,sum=1,t,l;
    cin>>n>>a>>b;
    for(i=1;i<=n;i++)
        if(a>=i&&a<=n-i+1&&b>=i&&b<=n-i+1)
            q++;
        else
            break;
    l=n+2;
    for(i=1;i<=q-1;i++)
    {
        l=n-2*(i-1);
        sum=sum+4*(l-1);
    }
    l=l-2;
    if(a==q)
        t=b-(q-1)-1;
    if(b==n-(q-1))
        t=a-(q-1)-1+(l-1);
    if(a==n-(q-1))
        t=n-(q-1)-b+(l-1)*2;
    if(b==q&&a!=q)
        t=n-(q-1)-a+(l-1)*3;
    cout<<sum+t;
    system("pause");
    return 0;
}

 

摘自码酷

noip201403螺旋矩阵【普及组】数学算法

标签:

原文地址:http://www.cnblogs.com/scx2015noip-as-php/p/matrix.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!