本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。

输入格式:

输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 1,相邻数字以空格分隔。

输出格式:

输出螺旋矩阵。每行 n 个数字,共 m 行。相邻数字以 1 个空格分隔,行末不得有多余空格。

输入样例:

12
37 76 20 98 76 42 53 95 60 81 58 93

输出样例:

98 95 93
42 37 81
53 20 76
58 60 76
我个人觉得,有的题目,思路清晰,比写的少更加重要,这道题,考的是设计模式,
如何设计出一个OBJ,进行控制性移动,类似小游戏中的主角,可以上下左右移动
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int data[][]={};
int width,height;
enum dir{ l,r,u,d }dir;//枚举设定方向
int x=,y=;
void changedir(){//改变路线
switch(dir){
case l:dir=u;break;
case u:dir=r;break;
case r:dir=d;break;
case d:dir=l;break;
}
}
void ahead(){
switch(dir){
case l:
if(x->=&&data[x-][y]==) x--;
else {
changedir();
ahead();
}
break;
case r:
if(x+<width&&data[x+][y]==) x++;
else{
changedir();
ahead();
}
break;
case u:
if(y->=&&data[x][y-]==) y--;
else{
changedir();
ahead();
}
break;
case d:
if(y+<height&&data[x][y+]==) y++;
else{
changedir();
ahead();
}
break;
}
}
int main()
{
int M;
scanf("%d",&M);
int num[M];
for(int i=;i<M;i++) scanf("%d",num+i);
sort(num,num+M,greater<int>());
for(int i=;i<=sqrt(M);i++) if(M%i==) width=i;
height=M/width;
if(width<height) swap(width,height);
data[x][y]=num[];dir=d;
for(int i=;i<M;i++){
ahead();
data[x][y]=num[i];
}
for(int i=;i<width;i++)
for(int j=;j<height;j++)
if(j!=height-) printf("%d ",data[i][j]);
else printf("%d\n",data[i][j]);
system("pause");
return ;
}

最新文章

  1. TCP三次握手,四次挥手
  2. LINQ之路 8: 解释查询(Interpreted Queries)
  3. C#皮肤制作
  4. IOS- 应用程序生命周期(前后台切换,应用的各种状态)详解
  5. Spring+Struts2/Hibernate 学习笔记
  6. PHPExcel 是用来操作Office Excel 文档的一个PHP类库
  7. 配置Java环境-20160613
  8. STC51系列单片机免掉电下载(热启动下载)
  9. Java程序员使用的20几个大数据工具
  10. puppy 制作linux
  11. 详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载
  12. Error (0xc0000225) installing Windows 8 R2 on VirtualBox
  13. java静态方法之线程安全问题
  14. Linux:快速找到占用CPU过高的Thread
  15. querySelectorAll选择器的js实现
  16. unity中获取七天的日期
  17. flask设置cookie,设置session,模拟用户认证、模拟管理后台admin、模拟用户logout
  18. zabbix邮件告警之 通过shell脚本发送告警
  19. mysql数据库,创建只读用户
  20. 启动docker 端口映射时IPV4无法使用

热门文章

  1. Pychar调用远程编译器的环境配置
  2. IdentityServer4学习笔记汇总(实现传送门在底部)
  3. TiKV事务实现浅析
  4. Servlet技术——request、respone详解
  5. 龙芯PG10 安装uuid-ossp 的方法 复用瀚高数据库的 so文件
  6. ora00972标识符过长
  7. day0~day13
  8. LC 98. Validate Binary Search Tree
  9. Java中自增(++)和赋值(=)运算效率比较
  10. java-TheadPoolExecutor