- /************************************************************************
- 6. 矩阵中填数. 当给出 N*N 的矩阵,要求用程序填入下列形式的数:
- ① 倒填,例如N=5 ② 蛇形填数 ③ 回转填数
- ┌─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┐
- │25│24│23│22│21│ │ 1│ 3│ 4│10│11│ │ 1│16│15│14│13│
- ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
- │20│19│18│17│16│ │ 2│ 5│ 9│12│19│ │ 2│17│24│23│12│
- ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
- │15│14│13│12│11│ │ 6│ 8│13│18│20│ │ 3│18│25│22│11│
- ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
- │10│ 9│ 8│ 7│ 6│ │ 7│14│17│21│24│ │ 4│19│20│21│10│
- ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
- │ 5│ 4│ 3│ 2│ 1│ │15│16│22│23│25│ │ 5│ 6│ 7│ 8│ 9│
- └─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┘
- ***********************************************************************/
- #include <stdio.h>
- //打印
- void output(int** array, int n)
- {
- int row,col;
- for(row=0; row<n; row++)
- {
- for(col=0; col<n; col++)
- {
- printf("%4d",*((int*)array + n*row + col));
- }
- printf("/n");
- }
- }
- //倒填
- void O_Fill(int** array, int n)
- {
- int row,col;
- int counter = 1;
- for(row=n-1; row>=0; row--)
- for(col=n-1; col>=0; col--)
- {
- *((int*)array + n*row + col) = counter++;
- }
- }
- //蛇形
- void S_Fill(int** array, int n)
- {
- bool direct=false;
- int row,col;
- int counter = 1;
- int n2 = n*n;
- row = 0; col = 0;
- *((int*)array + n*row + col) = counter;
- for(++counter; counter<=n2; counter++)
- {
- if(!direct)
- {
- row++;
- col--;
- if(row==n)
- {
- row--;
- col+=2;
- direct = !direct;
- }
- else if(col<0)
- {
- col++;
- direct = !direct;
- }
- }
- else
- {
- row--;
- col++;
- if(col==n)
- {
- row+=2;
- col--;
- direct = !direct;
- }
- else if(row<0)
- {
- row++;
- direct = !direct;
- }
- }
- *((int*)array + n*row + col) = counter;
- }
- }
- //回形
- void H_Fill(int** array, int n)
- {
- int row,col;
- int counter;
- int n2 = n*n;
- bool direct = false;
- row = 0, col = 0;
- counter = 1;
- *((int*)array + n*row + col) = counter;
- for(++counter; counter<=n2; counter++)
- {
- if(!direct)
- {
- row++;
- if(row==n)
- {
- row--;
- col++;
- direct = !direct;
- }
- }
- else
- {
- row--;
- if(row<0)
- {
- row++;
- col++;
- direct = !direct;
- }
- }
- *((int*)array + n*row + col) = counter;
- }
- }
- void main()
- {
- int array[6][6];
- O_Fill((int**)array,6);
- output((int**)array,6);
- printf("/n");
- S_Fill((int**)array,6);
- output((int**)array,6);
- printf("/n");
- H_Fill((int**)array,6);
- output((int**)array,6);
- }
练习6
最新推荐文章于 2025-03-14 21:10:23 发布

271

被折叠的 条评论
为什么被折叠?



