矩阵转换问题(蛇形打印,蛇形顺序打印,之字打印)c方法
来源:互联网 发布:java socket api 编辑:程序博客网 时间:2024/05/16 10:53
在某在线笔试遇到的题目就整理了下笔记来写下这个一些部分矩阵的转换问题。
问题描述:
输入:
123
894
765
输出:123456789
#include <stdio.h>int main(int argc, char *argv[]){ int min, max; //分别指向两个对角,并向内收缩 int i, j, n, a[100][100]; //定义足够大的数组 printf("请输入矩阵的阶及矩阵...\n"); scanf("%d", &n); for(i=0; i<n; i++) { for(j=0; j<n; j++) scanf("%d", &a[i][j]); } for(min=0,max=n-1; min<=max; min++,max--)//嵌套收缩 { for(i=j=min; j<=max; j++) //从左到右 printf("%d ", a[i][j]); for(i=min+1,j=max; i<=max; i++) //从上到下printf("%d ", a[i][j]); for(i=max,j=max-1; j>=min; j--) //从右到左 printf("%d ", a[i][j]); for(i=max-1,j=min; i>=min+1; i--) //从下到上 printf("%d ", a[i][j]); }printf("\n"); return 0;}第二种
输入:
1 2 3
4 5 6
7 8 9
输出:
1 2 3
8 9 4
7 6 5
#include <stdio.h>int main(int argc, char *argv[]){ int min, max; //分别指向两个对角,并向内收缩 int i, j, n, a[100][100]; //定义足够大的数组 printf("请输入矩阵的阶及矩阵...\n"); scanf("%d", &n); for(i=0; i<n; i++) { for(j=0; j<n; j++) scanf("%d", &a[i][j]); } int count[100][100]= {0}; int m = 1; for(min=0,max=n-1; min<=max; min++,max--)//嵌套收缩 { for(i=j=min; j<=max; j++) //从左到右 { count[i][j]=m++; } for(i=min+1,j=max; i<=max; i++){ count[i][j]=m++; //从上到下 } for(i=max,j=max-1; j>=min; j--){ count[i][j]=m++; //从右到左 } for(i=max-1,j=min; i>=min+1; i--) { count[i][j]=m++; //从下到上 } } for(i = 0 ;i < n;i++) { for(j = 0;j < n;j ++) printf("%d ",count[i][j]); printf("\n"); } return 0;}
之字形状打印,
输入如:
1 2 3
4 5 6
7 8 9
打印结果是:1 4 2 3 5 7 8 6 9。
#include<stdio.h>#include<stdlib.h> void PrintfDown(int (*a)[3],int &i,int &j){ while (1) { printf(" %d ",a[i][j]); if (i >= 2 || j <= 0)break; j--; i++; } if (i == 2) j++; else i++;}void PrintfUp(int (*a)[3],int &i,int &j){ while(1) { printf(" %d ",a[i][j]); if (j >= 2 || i <= 0 )break; j++; i--; } if (i <= 0) j++; else i++;}void Grial(int(*a)[3], int n){ int i = 0; int j = 0; while (i != 3 && j != 3) { PrintfDown(a, i, j); if (i == 3 || j == 3)break; PrintfUp(a,i,j); }}int main(){ int a[][3] = {1,2,3, 4,5,6, 7,8,9}; Grial(a, 3); return 0;}
之字形打印矩阵的c++版本
#include<iostream>#include<cstdlib>#include<iomanip>using namespace std;void zigzagPrintLine(int (*matrix)[4], int leftX, int leftY, int rightX, int rightY, bool isFromBottom){ if(isFromBottom) while(leftX >= rightX) cout << matrix[leftX--][leftY++] << " "; else while(rightX <= leftX) cout << matrix[rightX++][rightY--] << " ";} void zigzagPrintMatrix(int (*matrix)[4], int height, int width){ int leftX = 0, leftY = 0, rightX = 0, rightY = 0; int endX = height - 1, endY = width - 1; bool isFromBottom = true; while(leftY <= endY && rightX <= endX) { zigzagPrintLine(matrix,leftX,leftY,rightX,rightY,isFromBottom); if(++leftX > endX) { leftX = endX; leftY++; } if(++rightY > endY) { rightY = endY; rightX++; } isFromBottom = !isFromBottom; }}void printMatrix(int (*matrix)[4], int height, int width){ for(int i = 0; i < height; i++) { for(int j = 0; j < width; j++) cout << setw(2) << matrix[i][j] << " "; endl(cout); }}int main(void){ int matrix[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; endl(cout << "Original Matrix: "); printMatrix(matrix,4,4); endl(cout << "============="); endl(std::cout << "Zigzag output:"); zigzagPrintMatrix(matrix,4,4); return 0;}
全部代码已经在dev-c++上检验可实现。
0 0
- 矩阵转换问题(蛇形打印,蛇形顺序打印,之字打印)c方法
- (C#)打印蛇形正方形矩阵
- C++ 打印蛇形矩阵
- Java打印蛇形矩阵
- 打印输出蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵-题解
- [腾讯]打印蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 蛇形打印矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 20.蛇形矩阵打印
- JavaScript学习(一)
- linux如何设置无密码登录mysql(如何设置无密码登陆mysql)
- 自定义圆形ProgressBar
- gdb调试带参数程序
- 多项式的和,积(优化版)
- 矩阵转换问题(蛇形打印,蛇形顺序打印,之字打印)c方法
- Python process
- 后端面试题集——网络部分(持续更新中)
- [Properties]——资源配置文件·基本功能
- 软件测试方法
- 模板方法模式
- Bootstrap中元素的padding重写(以超大屏幕Jumbotron为例)
- Python multiprocessing
- 【BZOJ1208】【HNOI2004】宠物收养所