小 (替换文字 - 「wikioi」替换为「codevs」) |
小 (date) |
||
(未显示1个用户的2个中间版本) | |||
第1行: | 第1行: | ||
[[分类:模拟与排序]] | [[分类:模拟与排序]] | ||
==摘要== | ==摘要== | ||
− | {{信息题|蛇形矩阵|http://www.codevs. | + | {{信息题|蛇形矩阵|http://www.codevs.cn/problem/1160/|1|100|time=2014/08/16 20:01:00}} |
==题意== | ==题意== | ||
输出n*n的蛇形矩阵及其对角线之和。 | 输出n*n的蛇形矩阵及其对角线之和。 |
题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 需要注意 |
---|---|---|---|---|---|
蛇形矩阵 | ★☆☆☆☆ | 答案正确 | 100 | 2014/08/16 20:01:00 | 无 |
输出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; } |