Dynamic Morphing Square(动态变形矩阵)
题目描述:
解题思路:
先对输入的N进行判断,是否不小于3,如果小于3,需要继续输入一个新的数,知道输入的N比3大。
第一个打印的矩阵,*号为最外面一圈,其余全为-。
第二个打印的矩阵,*号向内缩减了一圈。
依次递减,直到*号缩到最内部,然后又开始往外扩张。
所以我们设置max和min变量记录每次需要打印*的位置,和第几次打印也是有关的。所以设置变量run记录打印的次数。
n阶矩阵当打印了n次后,继续循环,所以将run重置为0;
n的阶数如果是奇数,需要多循环一次。
代码如下:
1 #include "stdio.h" 2 #include "windows.h" 3 4 int pattern(int n){ 5 int i, j, run; 6 int max, min; 7 run = 0; 8 max = n - 1; 9 min = 0; 10 11 while(1){ 12 for (i = 0; i < n; i++){ 13 14 for (j = 0; j < n; j++) 15 { 16 if ((min <= max && min <= i && i <= max && min <= j && j <= max) && (i == min || i == max || j == min || j == max)) 17 printf("*");//每次打印,只有一圈*号,既a[i][i]和a[n-i][n-i]之间 18 else 19 printf("-"); 20 } 21 printf("\n"); 22 } 23 printf("\n"); 24 if (run < n / 2){ 25 max--; 26 min++; 27 } 28 if (run >= n / 2){ 29 max++; 30 min--; 31 } 32 Sleep(500);//延迟0.5s打印下一个矩阵 33 run++; 34 if (run > n-1 && n%2==0) 35 run = 0; 36 if (n % 2 != 0 && run>=n-1)//判断输入n的奇偶,是基数提前将run重置成0 37 run = 0; 38 } 39 40 } 41 void main(){ 42 int n; 43 printf("Input pattern size N :"); 44 45 while(scanf_s("%d",&n)){ 46 47 if (n < 3){ 48 printf("warning: pattern size should be at least 3!\n"); 49 printf("Input pattern size N :"); 50 } 51 else 52 break; 53 } 54 55 pattern(n); 56 57 scanf_s("%d", &n); 58 }
运行结果:
源码下载地址: