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 }

 运行结果:

源码下载地址:

http://pan.baidu.com/s/1bnDhl1t 

posted @ 2015-11-09 13:07  SeeKHit  阅读(365)  评论(0编辑  收藏  举报