当前位置:编程学习 > C/C++ >>

笔试题目:顺时针打印矩阵

笔试的一道题目,笔试的时候还是差一点,但是大体思路是正确的:
1.根据输入的行与列确定该矩阵由多少个矩形组成矩形层数level=( n>m? n:m)/2得出。
2.每一层矩形,按顺时针方向设置组成矩形的值
3.打印
重点:1.动态定义数组
[plain]  
<pre name="code" class="plain">//开辟内存空间动态建立二维数组。  
    matrix=(int **)calloc(n,sizeof(int *));  
    for(i=0;i<n;i++)  
    {  
        matrix[i]=(int *)calloc(m,sizeof(int));  
    }</pre><br>  
2.当前层数包含的值的范围以及矩形四条边包含的值的范围的划分。
[plain] 
rectLength=(m-i*2);  
        rectWidth=(n-i*2);  
  
        right=rectLength+rectWidth-1;  
        bottom=rectLength+rectWidth-1+rectLength-2;  
        left=(rectLength+rectWidth-2)*2;  
 
[plain] view plaincopy
#include<stdlib.h>  
void show(int m,int n) //m =chang n=kuang  
{  
    int **matrix;  
    int i,j;//i为当前层,j为当前矩形的当前位置  
    int rectLength,rectWidth;//矩形的长和宽  
    int level;  
    int sum=0;  
    int topL,rightL,bottomL,leftL,right,bottom,left;  
    if(!n || !m)  
        return ;  
    //开辟内存空间动态建立二维数组。  
    matrix=(int **)calloc(n,sizeof(int *));  
    for(i=0;i<n;i++)  
    {  
        matrix[i]=(int *)calloc(m,sizeof(int));  
    }  
    level=n>m ?n:m;  
    level=level/2; //矩形层数  
    sum=1;  
    for(i=0;i<=level;i++)  //修改每一层矩形的内容  
    {  
        rectLength=(m-i*2);  
        rectWidth=(n-i*2);  
  
        right=rectLength+rectWidth-1;  
        bottom=rectLength+rectWidth-1+rectLength-2;  
        left=(rectLength+rectWidth-2)*2;  
  
        for(j=1;j<= left;j++) //  
        {     
            if(j<=rectLength) //上边  
            {     
                matrix[i][j-1+i]=sum++;  
                continue;  
            }  
            else if(j > rectLength && j<=right) //右边    
            {  
                matrix[j-rectLength+i][m-i-1]=sum++;  
                continue;  
            }  
            else if( j >right && j<= bottom) //下边  
            {  
                matrix[n-i-1][bottom-j+1+i]=sum++;  
                continue;  
            }  
            else if( j > bottom && j<= left ) //左边  
            {  
                matrix[left-j+1+i][i] =sum++;  
                continue;  
            }  
            if(sum > n*m -1)  
                break;  
        }  
    }  
    for(i=0;i<n;i++)  
    {  
        printf("\n");  
        for(j=0;j<m;j++)  
            printf("%4d",matrix[i][j]);  
    }  
    printf("\n");  
}  
  
void main()  
{  
    int i,j;  
    printf("please input length and width ");  
    scanf("%d %d",&i,&j);  
    show(i,j);  
}  
 
 
 
 
补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,