1160 蛇形矩阵
2016-03-31 17:38
288 查看
题目描述 Description
小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.
算法思想:设为n*n的矩阵,我们设置四个边界,up,down,left,right.最中心的数的下标为n/2,n/2;初始时,我们设置边界right=down=m+1;up=left=m-1,当我们完成一次右,上,左下时,rigth++;down++,up–;left–;继续循环,直到key >n*n,即矩阵已经填满.
代码如下:
小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.
算法思想:设为n*n的矩阵,我们设置四个边界,up,down,left,right.最中心的数的下标为n/2,n/2;初始时,我们设置边界right=down=m+1;up=left=m-1,当我们完成一次右,上,左下时,rigth++;down++,up–;left–;继续循环,直到key >n*n,即矩阵已经填满.
代码如下:
#include<iostream> #define N 100 using namespace std; int main() { int a ,n,key=2,i,j; cin >> n; int left=0,right=0,up=0,down=0,m=n/2; down=right=m; up=left=m-1; int row=m,col=m; a[row][col]=1; while(key < n*n) { while(key<=n*n && col <= right){ a[row][++col]=key++; } while(key<=n*n && row > up){ a[--row][col]=key++; } while(key<=n*n && col > left){ a[row][--col]=key++; } while(key<=n*n && row <= down){ a[++row][col]=key++; } right++; //更新边界 down++; up--; left--; } for(i=0;i<n;i++){ for(j=0;j<n;j++){ cout << a[i][j]<<" "; } cout << endl; } int sum=0; //计算对角线和 for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i==j || i+j==n-1){ sum+=a[i][j]; } } } cout << sum<<endl; }
相关文章推荐
- 自定义Toast
- 15电气1班麻天骄作业
- android: 接收和发送短信
- java文件上传和下载
- java多线程-synchronized
- 数据结构: 链表基础
- Android App中实现简单的刮刮卡抽奖效果的实例详解
- GCD多线程的使用
- cookie和session
- 必须原创
- url参数中带有&号,需要用先把url做个解析,使其方便在网络上传递
- WSGI是什么
- S5PV210串行通信接口详解1
- 创建MyOffice项目
- A Byte of Python 笔记(7)数据结构:列表、元组、字典,序列
- Android 快速开发框架之——AndroidFine
- 如何计算物料品种数
- Spring MVC和Struts2的区别1
- linux(centos)用户与权限
- CodeForces 368B-Sereja and Suffixes【模拟】