(以“分类:模拟与排序 ==摘要== {{信息题|蛇形矩阵|http://www.wikioi.com/problem/1160/|1|100}} ==题意== 输出n*n的蛇形矩阵及其对角线之和...”为内容创建页面)
 
(换行符修复)
第6行: 第6行:
 
==题解==
 
==题解==
 
欸,纯模拟了。
 
欸,纯模拟了。
 +
 
很明显从最中间到最右下角一列是完全平方数,然后从这里入手一圈一圈填表。填完表输出,顺带处理下对角线求和就好了。
 
很明显从最中间到最右下角一列是完全平方数,然后从这里入手一圈一圈填表。填完表输出,顺带处理下对角线求和就好了。
 +
 
瞄了一眼评论区看到个打表的十分无奈。(点头)嗯,打表是个好方法!
 
瞄了一眼评论区看到个打表的十分无奈。(点头)嗯,打表是个好方法!
 
==代码==
 
==代码==

2014年8月16日 (六) 20:02的版本

摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 需要注意
蛇形矩阵 ★☆☆☆☆ 答案正确 100 {{{time}}}
无法理解日期"{{{time}}}"无法理解日期"{{{time}}}"

题意

输出n*n的蛇形矩阵及其对角线之和。

题解

欸,纯模拟了。

很明显从最中间到最右下角一列是完全平方数,然后从这里入手一圈一圈填表。填完表输出,顺带处理下对角线求和就好了。

瞄了一眼评论区看到个打表的十分无奈。(点头)嗯,打表是个好方法!

代码

1160.cpp代码已折叠
展开折叠内容
#include<cstdio>
int main(){
  int n,u[200][200],x,y,i,j,t,s=0;
  scanf("%d",&n);
  for(i=n/2+1,t=1;i<=n;++i,t+=2){
    u[i][i]=t*t;
    x=y=i;
    while(y>i-t+1)
      --y,u[x][y]=u[x][y+1]-1;
    while(x>i-t+1)
      --x,u[x][y]=u[x+1][y]-1;
    while(y<i)
      ++y,u[x][y]=u[x][y-1]-1;
    while(x<i-1)
      ++x,u[x][y]=u[x-1][y]-1;
  }
  for(i=1;i<=n;++i){
    for(j=1;j<=n;++j){
      printf("%d ",u[i][j]);
      s+=((i==j||i+j==n+1)?u[i][j]:0);
    }
    printf("\n");
  }
  printf("%d",s);
  return 0;
}

链接

著作权声明[编辑]

关于[编辑]