技巧性的题 (P1079)
来源:互联网 发布:假知怎么造句 编辑:程序博客网 时间:2024/06/05 17:03
【问题描述】
给出N,请将 1、2、…、N*N 填入矩阵,要求按下列几种规律填写(例如N=4):
1)、倒序矩阵:
16 15 14 13
12 11 10 9
8 7 6 5
4 3 2 1
2)、盘旋矩阵
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
3)、蛇形矩阵
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
4)、螺旋矩阵
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
注意,上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。
给出N,请将 1、2、…、N*N 填入矩阵,要求按下列几种规律填写(例如N=4):
1)、倒序矩阵:
16 15 14 13
12 11 10 9
8 7 6 5
4 3 2 1
2)、盘旋矩阵
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
3)、蛇形矩阵
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
4)、螺旋矩阵
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
注意,上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。
对的就是这个无敌瞎螺旋矩阵现写吃过亏的....其实核心部分没有错不过还是归零了,并且试数据试了我很久.....读题的重要性
还是瞎分析一波..
前两个错了自觉吔si
后两个就有点蛇皮了..至少对于我这种低智商
主要还是用 while 并且要根据题目要求的初始方向来 比如螺旋矩阵...
for(;count<n*n;){while(j+1<=n&&shu3[i][j+1]==0){ shu3[i][++j]=++count; }while(i+1<=n&&shu3[i+1][j]==0){ shu3[++i][j]=++count; }while(j-1>=1&&shu3[i][j-1]==0){ shu3[i][--j]=++count; }while(i-1>=1&&shu3[i-1][j]==0){ shu3[--i][j]=++count; }}开始先往右走,如果下一步超过了边界,就执行下一条 while ;
这样转了一圈,再从右开始走,现在如果一下格已经有数字了,就执行下一条while;
while的顺序 右 下 左 上
对于我来说还是很吼懂的(假装)
仔细一想 蛇皮矩阵好像也可以这么写》。。
#include<cstdio>using namespace std;int main(){int n;scanf("%d",&n);long long shu[201][201];long long k=1;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){shu[i][j]=k++;}}for(int i=n;i>=1;i--){for(int j=n;j>=1;j--){if(j!=1){printf("%d ",shu[i][j]);}else if(j==1){printf("%d\n",shu[i][j]);}}}printf("\n");for(int i=1;i<=n;i++){if(i%2!=0){for(int a=1;a<=n;a++){if(a!=n){printf("%d ",shu[i][a]);}else if(a==n){printf("%d\n",shu[i][a]);}}} else if(i%2==0) { for(int a=n;a>=1;a--) { if(a!=1) { printf("%d ",shu[i][a]); } else if(a==1) { printf("%d\n",shu[i][a]); } } }}printf("\n");long long shu2[201][201];shu2[1][1]=1;for(int j=2;j<=n;j++){if((j-1)%2==0){shu2[1][j]=shu2[1][j-1]+1;}if((j-1)%2==1){shu2[1][j]=shu2[1][j-1]+(j-1)*2;}} for(int i=2;i<=n;i++){if(i%2==0){int he=i+1;for(int b=i,a=he-b;b>=1,a<=n;a++,b--){if(a<=n&&a>=2&&b>=1&&b<=n)shu2[a][b]=shu2[a-1][b+1]-1;}}if(i%2==1){int he=i+1;for(int b=i,a=he-b;b>=1,a<=n;a++,b--){if(a<=n&&a>=2&&b>=1&&b<=n)shu2[a][b]=shu2[a-1][b+1]+1;}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++) { if(shu2[i][j]!=0) shu2[n+1-i][n+1-j]=n*n+1-shu2[i][j]; }}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(j!=n){printf("%d ",shu2[i][j]);}if(j==n){printf("%d\n",shu2[i][j]);}}}printf("\n");long long shu3[201][201];int i=1;int j=1;shu3[1][1]=1;long long count=1;for(;count<n*n;){while(j+1<=n&&shu3[i][j+1]==0){ shu3[i][++j]=++count; }while(i+1<=n&&shu3[i+1][j]==0){ shu3[++i][j]=++count; }while(j-1>=1&&shu3[i][j-1]==0){ shu3[i][--j]=++count; }while(i-1>=1&&shu3[i-1][j]==0){ shu3[--i][j]=++count; }}for(int a=1;a<=n;a++){for(int b=1;b<=n;b++) {printf("%lld ",shu3[a][b]);}printf("\n");}return 0;}
阅读全文
0 0
- 技巧性的题 (P1079)
- notepad的技巧性问题
- NYOJ 92图像的有用区域 (技巧性广搜)
- CE编程的一些技巧性
- 游戏的策略性和技巧性
- Ratio(P1079)
- Ignatius and the Princess III(母函数一种技巧性的暴力)
- 面试时最常被问到的65个问题和技巧性回答(第一篇)
- poj2109 Power of Cryptography —— 技巧性(高精度+二分的方法还没写)
- (HR面试)最常见的面试问题和技巧性答复
- POJ1182---食物链(带权并查集~技巧性超强的解法)
- 一个满有技巧性的排序算法
- java continue标签的一个技巧性例子
- 单元素数组的技巧性用法
- 关于面试的65个技巧性回答
- UVA 10125 Sumsets 技巧性的枚举
- 【ZT】面试的65个技巧性回答
- SCU2016-06 S题 技巧性动态规划
- 从上到下打印二叉树
- 快手批量下载视频方法
- ActionContext中域对象和原生对象之间的关系以request为例
- 陈越《数据结构》第五讲 树(下)
- Ajax总结篇
- 技巧性的题 (P1079)
- 闲谈 凡事都得有目标
- jQuery二行简单实现轮播图
- JAVA:利用Apache poi在服务器传输带有数据和图片的excel的数据流至浏览器供其下载至本地
- zookeeper的ACL
- I
- 顺序表删除数据元素算法
- leetcode17 Letter Combinations of a Phone Number
- mxnet使用预训练模型预测