C 语言 对角线添充二维数组

  实现 这种 "对角线" 添充二维数组的算法 ,写了一个实现 : 主要是的想法是设定几种状态 比如 :"横加竖减 横减竖加  改变状态横加 改变状态竖加 " 在某个特殊的情况下 改变状态. 就可以用一个循环 来完成了. 

View Code
 1 #include <stdio.h>
2
3 void numBox(int x,int y)
4 {
5 int a[x][y]; //二维数组
6 int i,j; //坐标
7 int k; //循环变量
8 int mode = 3; //状态 有三种 一种是 横加竖减 横减竖加 改变状态横加 改变状态竖加
9 i = j = k = 0; //初始化
10
11 for(k = 0;k< x*y;k++)
12 {
13 //printf("i = %d j = %d K = %d\n",i,j,k+1);
14 a[i][j] = k + 1;
15
16 if( mode == 0) //如果mode 为 0 则 横加竖减
17 {
18 i ++;
19 j --;
20 }
21 else if (mode == 1) //如果mode 为 0 则 横减竖加
22 {
23 i -- ;
24 j ++ ;
25 }
26 else // 改变状态横加 改变状态竖加
27 {
28 if(i == x -1)
29 {
30 mode = 1;
31 j ++;
32 continue;
33 }
34 else if(j == y -1)
35 {
36 mode = 0;
37 i ++;
38 continue;
39 }
40 else if(i == 0)
41 {
42 mode = 0;
43 j ++;
44 continue;
45 }
46 else
47 {
48 mode = 1;
49 i ++;
50 continue;
51 }
52 }
53 if(i == 0 || j == 0 || i == x -1 || j == y -1) // 这些特殊值时. 需要把状态改为 3
54 {
55 mode = 3;
56 }
57 }
58 //输出
59 for(int m = 0;m<x;m++)
60 {
61 for(int n = 0;n < y;n++)
62 {
63 printf("%3d",a[m][n]);
64 }
65 printf("\n");
66 }
67 }
68
69 int main()
70 {
71 //可以自定义 二维数组 的长及宽
72 numBox(3,8); //调用函数
73 }

输出的结果:

原文地址:https://www.cnblogs.com/easyfrog/p/2304715.html