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