笔试题&面试题:顺时针输出一个矩阵
2014-06-27 09:45
225 查看
题目:顺时针输出一个矩阵(N*N)。
假设一个矩阵为:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
那么程序应该给出的输出为:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
这个问题在网上也搜集了一下答案,没有什么巧妙的办法,所以下面给出的是完全按照顺时针走向输出的一个代码(自己亲手编写,测试通过):
下面是程序在ubuntu下运行的结果(程序中的维度可以修改,自己测试过1~7没有问题):
假设一个矩阵为:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
那么程序应该给出的输出为:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
这个问题在网上也搜集了一下答案,没有什么巧妙的办法,所以下面给出的是完全按照顺时针走向输出的一个代码(自己亲手编写,测试通过):
#include <stdio.h> #define N 5 //矩阵的维度 void clockwise_matrix(int matrix[] ) { int starta = 0, startc = 0, enda = N-1, endc = N-1; int array, column, i; while(1) { for(i = 0; startc+i <= endc; i++) { //横向递增 printf("%3d ", matrix[starta][startc+i]); } if(starta < enda) { //这个判断是为了使矩阵剩余的部分只剩下一行的时候的特殊情况处理 for(i = 1; starta+i <= enda; i++) { //竖向递增 printf("%3d ", matrix[starta+i][endc]); } for(i = 1; endc-i >= startc; i++) { //横向递减 printf("%3d ", matrix[enda][endc-i]); } for(i = 1; enda-i > starta; i++) { //竖向递减 printf("%3d ", matrix[enda-i][startc]); } } starta ++; startc ++; enda --; endc --; if(starta > enda) { break; } } } int main() { int i, j; int matrix ; for(i = 0; i < N; i++) //给测试数组赋值 for(j = 0; j < N; j++) { matrix[i][j] = i*N + j; } printf("The test matrix is :\n"); //打印出测试数组 for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { printf("%3d ", matrix[i][j]); } printf("\n"); } printf("\n"); clockwise_matrix(matrix); printf("\n"); return 0; }
下面是程序在ubuntu下运行的结果(程序中的维度可以修改,自己测试过1~7没有问题):
相关文章推荐
- 笔试题&面试题:输入一个维度,逆时针打印出一个指定矩阵
- 输出一个矩阵,按照顺时针方向内增大
- 华为面试题 输入一个n,在屏幕上输出N*N的矩阵
- 笔试题&面试题:找出一个数组中第m小的值并输出
- 笔试题&面试题:找出一个数组中第m小的值并输出
- 剑指offer面试题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
- 【面试题】剑指offer20--顺时针打印一个矩阵的数字
- 笔试题&面试题:CW输出矩阵
- 面试题6 将一个n*n图像矩阵顺时针旋转90°
- 笔试题&面试题:输入一个维度,逆时针打印出一个指定的矩阵
- c++第九周【任务4】建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数,完成矩阵的输入、输出、加、减、相等判断等操作。
- (大神勿入)据说是一道面试题,然后自己就写了一发(矩阵的螺旋输出)
- 第九周实验报告任务4 建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数,完成矩阵的输入、输出、加、减、相等判断等操作。
- 第九周C++任务四。建立一个二维数组类Douary,完成矩阵的输入、输出、加、减、相等判断等操作
- 面试题 在一段字符串中 含有很多相同的 例如"aaa", 需要随机替换一个为 "bbb" ,其余的替换为空
- C++递归问题之二——n皇后问题:以四、八皇后为例,给定n个皇后要求将它们放在一个n维矩阵中,任意两个皇后不能出现在同一行、列、主副对角线上,输出具体的摆放方式
- 第九周试验任务四--建立一个二维数组类Douary,完成矩阵的输入、输出、加、减、相等判断等操作
- 求Fibonacc数列中大于t(t>3)的最小一个数 例 带入1000输出1597
- 第九周实验报告(四)建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数,完成矩阵的输入、输出、加、减、相等判断等操作
- 程序员面试题精选100题(51)-顺时针打印矩阵