wikioi 1160 蛇形矩阵
/*========================================================================
1160 蛇形矩阵
题目描述 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
数据范围及提示 Data Size & Hint
==========================================================================*/
解析:
下面是n等于7和n等于5的时候数组的样子:

填充数组的方式 如下:
先手动填充数字1(其位置为(n/2,n/2),如上图所示。)
然后一层一层地填充其余部分的数据。(层数m=n/2)
对每一层的填充,按如下顺序处理:
先填充右边这一列(这一列最底下的数据先不填充,下同。)
接着填充上边的横行,然后填充左边这一列,最后填充下边的横行。
(每一段的填充范围如图颜色所示。)
对第x层(1<=x<=m),填充某一段时,该段数据个数为2*x。
比如n=5,第一层每一段的个数是2,第二层每一段的个数是4.
n=7时,第三层每一段的个数是6.
……所以,每一段的循环次数k=2*x。
下面的代码对这一点的处理稍微不同,但本质一样。下面的k从2开始,k/2要小于或等于m即可。
(段与段之间要注意修改坐标)
下面是代码:
#include<stdio.h>
int main()
{
int i,j,n,a[][],k,m,t,p,sum=;
scanf("%d",&n);
i=j=n/;//最内层的1所在的位置
m=n/;//循环填充的层数(不包括最内层的1)
a[i][i]=;
t=;//准备放进数组的数据
for(k=;k/<=m;k=k+)
{
j=j+;
for(p=;p<=k;p++)//填充右侧这一列
{
a[i][j]=t;
t++;
i--;
}
i++;
j--;
for(p=;p<=k;p++)//填充上边这一横行
{
a[i][j]=t;
t++;
j--;
}
j++;
i++;
for(p=;p<=k;p++)//填充左边这一列
{
a[i][j]=t;
t++;
i++;
}
i--;
j++;
for(p=;p<=k;p++)//填充下面这一横行
{
a[i][j]=t;
t++;
j++;
}
j--;
}
for(i=;i<n;i++)//输出数组顺便求对角线元素的和
{
for(j=;j<n;j++)
{
printf("%5d ",a[i][j]);
if(i==j||i+j==n-) sum=sum+a[i][j];
}
printf("\n");
}
printf("%d\n",sum);
return ;
}
wikioi 1160 蛇形矩阵的更多相关文章
- codevs 1160 蛇形矩阵
1160 蛇形矩阵 传送门 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 小明玩一个数字游戏,取个n行 ...
- 1160 蛇形矩阵(codevs)
http://codevs.cn/problem/1160/ 题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1 ...
- codevs 1160 蛇形矩阵x
题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该 ...
- js实现蛇形矩阵
参加腾讯前端实习生笔试,真的是被虐了千百遍,除了一条js程序题,其他半点前端都没有,都是考算法,计算机原理,数据结构.下面贴上腾讯笔试最后三大条中的一条,实现一个蛇形矩阵的输出.蛇形矩阵的什么样这里我 ...
- 【面试】输出"蛇形"矩阵
一.题目描述 腾讯实习在线笔试的一道题目. 根据输入的数字(< 1000),输出这样的"蛇形"矩阵,如下.输入n,输出(n * n)阶矩阵,满足由外到内依次增大. 如: 输入 ...
- c++实现蛇形矩阵总结
蛇形矩阵,百度了一下,是这么一个东西: 像一条蛇一样依次递增. 我想,竟然做了螺旋矩阵,那做一下这个吧.在之前的螺旋矩阵的main函数基础上,写个函数接口就行了,这一次做的很快,但是这个矩阵感觉比螺旋 ...
- EOJ3536 求蛇形矩阵每一行的和---找规律
题目链接: https://acm.ecnu.edu.cn/problem/3536/ 题目大意: 求蛇形矩阵的每一行的和,数据范围n<=200000. 思路: 由于n数据较大,所以感觉应该是需 ...
- Java编码 蛇形矩阵的构建与遍历输出
一.蛇形矩阵的构建,并按行输出 例: 输入:n, 生成n*n的蛇形矩阵 1 2 3 8 9 4 7 6 5 输出:1 2 3 8 9 4 7 6 5 java编码 public static void ...
- c++打印蛇形矩阵
一个m*n的矩阵里按照下图形式填充,最后形成的矩阵即为蛇形矩阵,下图是m=4, n =5时的蛇形矩阵: 方法一:逐层循环 #include <iostream> using namespa ...
随机推荐
- JAVA判断当前时间是上午am还是下午pm
//结果为"0"是上午 结果为"1"是下午 public class GregorianTest { public static void main(Strin ...
- BZOJ 1853 幸运数字
需要优化一波常数. 以及刚才那个版本是错的. #include<iostream> #include<cstdio> #include<cstring> #incl ...
- bootstrap菜单完美解决---原创
由于bootstrap的各方优点,偶的“点金项目细化分包管理平台”决定采用它.但在使用中遇到了一些问题,比如菜单的问题,这个菜单是用的一个JQuery的一个效果,点击后,所点击的链接处的class要加 ...
- Google protobuf
个人理解: 定义.proto文件就是指明消息里包含的成员和类型,protoc会compile成相应的java文件包含interface和implementation class,然后在构建messag ...
- 集合视图控制器(CollectionViewController) 、 标签控制器(TabBarController) 、 高级控件介绍
1 创建集合视图,设置相关属性以满足要求 1.1 问题 集合视图控制器UIConllectionViewController是一个展示大量数据的控制器,系统默认管理着一个集合视图UICollectio ...
- 内存回收,Dispose,Close,Finalie(C#中的析构函数)
NET中的资源分托管和非托管,所谓的托管是指CLR(通用语言运行时)中进行管理的资源,它可以由CLR自动进行内存回收. 也就是大家熟知的GC(垃圾回收机制). 而对于 非托管资源,比如数据库连接,CO ...
- (void*)0 的理解
例如: #define NULL ((void *)0) 用来定义无效的指针 (void *)0 就是将0强制转化为(void *)类型的指针 char *ch = (void *)0;//ch指向地 ...
- Java-->将txt文件的所有行反转
--> 这里和上次代码不同,对同一文件进行操作,所以要用到一个第三方容器来存储数据 package com.dragon.java.filereverseline; import java.io ...
- rsync 使用示例
导读 Rsync(remote sync) 是用于同步某一位置文件和目录到另一位置的有效方法.备份的位置可以在本地服务器或远程服务器.本站之前亦有介绍rsync的安装配置和教程,详看<rsync ...
- Spring学习笔记--spring+mybatis集成
前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...