回旋矩阵

 

一直没得产品给我做,尼玛闲得蛋疼,用C写写这玩意儿耍,

 

第一种方法

int main(int argc, const char * argv[])

{

    int n, max, num = 1, a[1000][1000];

    

    printf("请输入矩阵行数\n");

    scanf("%d", &n);

    printf("请输入矩阵中最大数\n");

    scanf("%d", &max);

    

    int maxNum = max < n*n ? max: n*n;

 

    for (int i = 0; i <= n/2 && num <= maxNum; i++) {//控制最多转n/2

        

        for (int j = 0; j < 4; j++) {//控制没圈转弯四次,且得到转弯的方向

            

            for (int k = i; (k < n-i-1 || i == k) && num <= maxNum; k++, num++) {//控制每条线的数逐渐加一

                

                switch (j) {

                    case 0: a[i][k] = num; break;

                    case 1: a[k][n-i-1] = num; break;

                    case 2: a[n-i-1][n-k-1] = num; break;

                    case 3: a[n-k-1][i] = num; break;

                                                

                    default: break;

                }

            }  

        }

    }

 

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

            printf("%3d", a[i][j]);

        }

        printf("\n");

    }

    return 0;

}

 

 

 第二种

int main(int argc, const char * argv[])

{

    int num, max;

    int a[1000][1000] = {0};

    printf("请输入矩阵行数\n");

    scanf("%d", &num);

    printf("请输入矩阵中最大数\n");

    scanf("%d", &max);

    

    a[0][0] = 1;

    int m = 0, n = 0;

    

    /*  m代表数组行,n代表列;

     由于逆时针循环旋转,所以有这样的规律 >>>>>>>>> 进行循环加数;

     二维数组全部初始化为零,那么只要右边一位数为零,值就加一,否则只要下边一位数为零就加一,从而得到下面的 if else 循环

     */

    for (int i = 2; i <= max && i <= num*num; i++) {

        if (a[m-1][n] == 0 && m > 0) {

            if (a[m][n-1] == 0 && n > 0) {

                n--;

            } else {

                m--;

            }

        } else if (a[m][n+1] == 0  && n+1 < num) {

            n++;

        } else if (a[m+1][n] == 0 && m+1 < num) {

            m++;

        } else if (a[m][n-1] == 0 && n > 0) {

            n--;

        }

        a[m][n] = i;

    }

    

    for (int i = 0; i < num; i++) {

        for (int j = 0; j < num; j++) {

            printf("%3d", a[i][j]);

        }

        printf("\n");

    }

    return 0;

}

 

完毕

 

 

posted @ 2015-03-12 14:45  李xu  Views(253)  Comments(0Edit  收藏  举报