zoukankan      html  css  js  c++  java
  • cogs 1811. [NOIP2014]螺旋矩阵

    ★   输入文件:matrixc.in   输出文件:matrixc.out   简单对比

    时间限制:1 s   内存限制:256 MB

    【题目描述】

    MLE:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    
    using namespace std;
    const int N=10010;
    
    long long a[N][N];
    int n,x,y;
    
    int main()
    {
    	freopen("matrixc.in","r",stdin);
    	freopen("matrixc.out","w",stdout);
    	scanf("%d%d%d",&n,&x,&y);
    	long long tot=0;
    	int i=1,j=0;
    	long long nn=n*n;
    	while(1)
    	{
    		while((++j)<=n&&!a[i][j])
    			a[i][j]=(++tot);
      		j--;
    		while((++i)<=n&&!a[i][j])
    			a[i][j]=(++tot);
    		i--;
    		while((--j)>=1&&!a[i][j])
    			a[i][j]=(++tot);
    		j++;
    		while((--i)>=1&&!a[i][j])
    			a[i][j]=(++tot);
    	    i++;
    		if(tot>=nn)
    		{
    			printf("%d",a[x][y]);
    			return 0;
    		}
    	}
    	return 0;
    	
    }
    

    找规律:

    #include<stdio.h>
    int main()
    {	freopen("matrixc.in","r",stdin);
    	freopen("matrixc.out","w",stdout);
        int n,i,j;
        int m;//m表示总共的层数 
        int k,p,q;//循环变量 
        int flag=0;//标志性变量:等于0表示尚未循环到目标元素(i,j) 
        int t;
         int len;
         
        scanf("%d%d%d",&n,&i,&j);
        m=(n+1)/2;  //m表示总共的层数 
        t=1;        //t表示要填进数组的数字
        for(k=1;k<=m&&flag==0;k++)
        {
            p=k,q=k;      //(k,k)是第k层左上角坐标点
            len=n-2*(k-1);//表示当前层中每一条边的元素个数 
            for(;q<=(k+len-1);q++)//填充当前层的顶边 
            {
                if(p==i&&q==j)
                {
                    printf("%d
    ",t);
                    return 0;
                }
                t++;
            }
            q--;
            p++;
            for(;p<=(k+len-1);p++)//填充当前层的右边 
            {
                if(p==i&&q==j)
                {
                    printf("%d
    ",t);
                    return 0;
                }
                t++;
            }
            p--;
            q--;
            for(;q>=k;q--)//填充当前层的下边
            {
                if(p==i&&q==j)
                {
                    printf("%d
    ",t);
                    return 0;
                }
                t++;
            }
            q++;
            p--;
            for(;p>k;p--)//填充当前层的左边
            {
                if(p==i&&q==j)
                {
                    printf("%d
    ",t);
                    return 0;
                }
                t++;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    JS 保存表单默认值 为空时自动填充默认值
    .net 防盗链
    Subversion安装和使用
    (转) MFC的入口点与消息循环,消息映射
    ASP.NET树形控件TreeView的递归绑定
    SQL Server中的分页
    C# 调用WebService的方法
    从零开始定义自己的JavaScript框架(一)
    JS中的call和apply
    JS中的自执行函数
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/7223674.html
Copyright © 2011-2022 走看看