蛇形矩阵
2016-03-12 14:31
197 查看
题目描述 Description
小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.
输入描述 Input Description
n(即n行n列)
输出描述 Output Description
n+1行,n行为组成的矩阵,最后一行为对角线数字之和
样例输入 Sample Input
3
样例输出 Sample Output
5 4 3
6 1 2
7 8 9
25
#include <iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
using namespace std;
stack <char> s;
int main()
{
int a[101][101];
int i, j, s = 0, n;
scanf("%d", &n);
int flag = n * n;
memset(a, 0, sizeof(a));
i = n;
j = n + 1;
while (flag > 0)\\顺序是固定的
{
while(a[i][j - 1] == 0 && j > 1)\\因为有==0的条件,所以已经包含了所有情况,不含有覆盖情况
a[i][--j] = flag--;
while (a[i - 1][j] == 0 && i > 1)
a[--i][j] = flag--;
while (a[i][j + 1] == 0 && j < n)
a[i][++j] = flag--;
while (a[i + 1][j] == 0 && i < n)
a[++i][j] = flag--;
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
if (i == j || i + j == n + 1)
s += a[i][j];
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("%d", s);
return 0;
}
小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.
输入描述 Input Description
n(即n行n列)
输出描述 Output Description
n+1行,n行为组成的矩阵,最后一行为对角线数字之和
样例输入 Sample Input
3
样例输出 Sample Output
5 4 3
6 1 2
7 8 9
25
#include <iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
using namespace std;
stack <char> s;
int main()
{
int a[101][101];
int i, j, s = 0, n;
scanf("%d", &n);
int flag = n * n;
memset(a, 0, sizeof(a));
i = n;
j = n + 1;
while (flag > 0)\\顺序是固定的
{
while(a[i][j - 1] == 0 && j > 1)\\因为有==0的条件,所以已经包含了所有情况,不含有覆盖情况
a[i][--j] = flag--;
while (a[i - 1][j] == 0 && i > 1)
a[--i][j] = flag--;
while (a[i][j + 1] == 0 && j < n)
a[i][++j] = flag--;
while (a[i + 1][j] == 0 && i < n)
a[++i][j] = flag--;
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
if (i == j || i + j == n + 1)
s += a[i][j];
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("%d", s);
return 0;
}
相关文章推荐
- Java之美[从菜鸟到高手演变]之设计模式
- ZooKeeper典型应用场景(转)
- ZooKeeper概述(转)
- Samba服务搭建 | Charlie's Blog
- 常见的内存泄漏问题及解决办法
- python callable 函数
- css图片的查找方式和c#程序查找方式不一致
- CAS
- JavaScript在网页中出现的位置
- 部署与管理ZooKeeper(转)
- Centos搭建Samba - 叶子-吴佰清 - 博客园
- 微信收货地址开发分享
- Item 25: 对右值引用使用std::move,对universal引用则使用std::forward
- mongodb - 集合重命名
- QBImagePicker用法详解
- Mac 开启和关闭root权限
- Oracle数据库中对null值的排序及mull与空字符串的区别
- quick 3.3 display.newColorLayer setContentSize
- checkbox被点击后默认事件与事件监听哪个先发生
- Zookeeper Api(java)入门与应用(转)