(C语言)oracle笔试题目,蛇形矩阵的一种简单的解决方法
2013-10-04 22:44
281 查看
1. 请用C语言实现 输入N,打印N*N矩阵
比如N=3,打印:
1 2 3
8 9 4
7 6 5
N=4,打印:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
代码:
2013加油!!!!
比如N=3,打印:
1 2 3
8 9 4
7 6 5
N=4,打印:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
代码:
#include <stdio.h> #include <stdlib.h> /* 蛇形矩阵另外一种算法: 整体思路:顺时针方向依次放入数据,如果走到边缘(数组边缘或者已经存放过数据)就顺时针拐弯。 直到将所有的数据填满。 算法优点:这种算法是模拟实际中画蛇形矩阵的方法,只用到了判断是否为0的一个小函数, 没有用到更高级的数学方法来解此题目,个人感觉更加直观,便于理解。 */ int isEmpty(int a)//判断数组元素是否为0 { if(a == 0) return 1; else return 0; } int main() { const int N = 3; int a = {0};//将所有元素初始化为0 int i = 0;// int j = 0; int k = 1;//数据元素,从1---N*N while(1) { while (j <= N-1)//横向向右走,最多走N步,此处只需考虑最大值就行, //循环内部会自己判断是否要进行转弯 { if (isEmpty(a[i][j]))//如果数组元素是0则赋值 { a[i][j] = k; j++;//再走一步 k++;//数据跟着增加1 } else//如果不为空则跳出循环,拐弯 break; } j--;//j往前复位一步 i++;//往下转向 while(i <= N-1)//向下依次走 { if (isEmpty(a[i][j])) { a[i][j] = k; i++; k++; } else break; } i--;//退一步复位 j--;//继续转向 while (j >= 0)//往左走,走到边缘(边缘可以是0,也可以是一个非0数) { if (isEmpty(a[i][j])) { a[i][j] = k; j--; k++; } else break; } j++;//复位 i--;//转向 while(i >= 0)//往上走 { if (isEmpty(a[i][j])) { a[i][j] = k; i--; k++; } else break; } i++;//复位 j++;//转向 if (k == N*N + 1)//填充完所有数据以后K值在自加到过程中会比N*N多1 { break; } } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { printf("%d\t", a[i][j]); } putchar(10);//回车 } system("pause"); return 0; }
2013加油!!!!
相关文章推荐
- 题目1019:简单计算器(两种方法解决,一种超简单,一种超复杂)都利用了栈
- 查看已安装软件包的方法 and Oracle中文乱码解决办法总结 and Ubuntu12.04下Windows软件的安装(Wine的简单使用)
- oracle 远程访问数据库 ORA-01034和ORA-27101问题的一种解决方法
- 简单方法-改变win7兼容性(SQLServer,Oracle)解决不能登录的问题
- Oracle乱码的一种解决方法
- 解决ScrollView嵌套RecyclerView只显示一行的一种比较简单的方法
- Oracle EBS R12 - 报FRM-91126错的一种可能原因和解决方法
- 解决Oracle处理中文乱码的一种方法
- linux下oracle服务开机自启动最简单的解决方法
- oracle行触发器不能读原表的一种解决方法
- C语言字符串库函数的实现也是笔试题常考的题目,以下代码没有严格测试,只是简单的实现:
- [置顶] C语言复制文件的两种简单的方法【从根本解决问题】
- 解决Oracle中用EXP 命令后用IMP导出数据出现错误的一种方法
- 用C语言模仿Python函数的一种简单实现方法
- Oracle错误 ora-12514 解决方法
- C语言测试题目解答:微软一道笔试题,2005年华为招聘
- Android 开发启动时白屏或黑屏的最简单解决方法
- Oracle用户被锁解决方法
- Oracle常见问题解决方法
- Oracle中的 UPDATE FROM 解决方法