蛇形矩阵
作者:互联网
题目内容:
从键盘任意输入一个自然数n(n表示矩阵的大小,假设不超过100),请编程输出一个n*n的蛇形矩阵。如果输入的n不是自然数或者输入了不合法的数字,则输出"Input error!"。
函数原型: void ZigzagMatrix(int a[][N], int n);
函数功能:计算n*n的蛇形矩阵
提示:用两个双重循环分别计算n*n矩阵的左上三角和右下三角,设置一个计数器从1开始记录当前要写入矩阵的元素值,每次写完一个计数器加1,在计算左上角和右下角矩阵元素时,分奇数和偶数两种情况考虑待写入的元素在矩阵中的行列下标位置。
程序运行结果示例1:
Input n:
5↙
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25
程序运行结果示例2:
Input n:
4↙
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
程序运行结果示例3:
Input n:
-5↙
Input error!
程序运行结果示例4:
Input n:
105↙
Input error!
程序运行结果示例5:
Input n:
w↙
Input error!
输入提示信息:"Input n:\n"
输入错误提示信息:"Input error!\n"
输入格式: "%d"
输出格式:"%4d"
数据换行: "\n"
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include <stdio.h> int a[110][110]; int main() { int n, x; printf("Input n:\n"); x = scanf("%d", &n); if(x != 1 || n > 100 || n < 0) { printf("Input error"); return 0; } int i = 0, j = 0, cnt1 = 0, cnt2 = 1, cnt = 1; while(cnt2 <= n) { a[i][j] = cnt++; if(++cnt1 == cnt2) { cnt1 = 0; if(cnt2 % 2 != 0 && i == 0) j++; else if(cnt2 % 2 == 0 && j == 0) i++; cnt2++; } else { if(cnt2 % 2 == 0) i++, j--; else i--, j++; } } i = n - 1, j = n - 1, cnt = n * n, cnt2 = 1; while(cnt2 <= n - 1) { a[i][j] = cnt--; if(++cnt1 == cnt2) { cnt1 = 0; if(cnt2 % 2 != 0 && i == n - 1) j--; else if(cnt2 % 2 == 0 && j == n - 1) i--; cnt2++; } else { if(cnt2 % 2 == 0) j++, i--; else j--, i++; } } for(i = 0; i < n; i++) { for(j = 0; j < n; j++) printf("%4d", a[i][j]); printf("\n"); } return 0; }
标签:程序运行,示例,int,矩阵,蛇形,error,Input 来源: https://www.cnblogs.com/WTSRUVF/p/14475262.html