A Za, A Za, Fighting...

坚信:勤能补拙

顺时针打印矩阵

题目来源:
http://zhedahht.blog.163.com/blog/static/254111742010111112236313/

模拟法
#include<stdio.h>
#define MAX_LEN 101

void
print_circle(
int (*mtrx)[MAX_LEN], int leftup_x, int leftup_y, int rightdown_x, int rightdown_y)
{
    
int i, j;
    
if(leftup_x == rightdown_x) {
        
for(j=leftup_y; j<=rightdown_y; j++)
            printf(
"%d\t", mtrx[leftup_x][j]);
        
return;
    }
    
if(leftup_y == rightdown_y) {
        
for(i=leftup_x; i<=rightdown_x; i++)
            printf(
"%d\t", mtrx[i][leftup_y]);
        
return;
    }

    
for(i=leftup_y; i<rightdown_y; i++)
        printf(
"%d\t", mtrx[leftup_x][i]);
    
for(j=leftup_x; j<rightdown_x; j++)
        printf(
"%d\t", mtrx[j][rightdown_y]);
    
for(i=rightdown_y; i>leftup_y; i--)
        printf(
"%d\t", mtrx[rightdown_x][i]);
    
for(j=rightdown_x; j>leftup_x; j--)
        printf(
"%d\t", mtrx[j][leftup_y]);
}

void
solve(
int (*mtrx)[MAX_LEN], int width, int length)
{
    
int lu_x, lu_y, rd_x, rd_y;
    lu_x 
= lu_y = 0;
    rd_x 
= width-1;
    rd_y 
= length-1;
    
while(1) {
        
if(lu_x>rd_x || lu_y>rd_y)
            
break;
        print_circle(mtrx, lu_x, lu_y, rd_x, rd_y);
        
++lu_x;
        
++lu_y;
        
--rd_x;
        
--rd_y;
    }
}

int
main(
int argc, char **argv)
{
    
int i, j, length, width, matrix[MAX_LEN][MAX_LEN];
    scanf(
"%d %d"&width, &length);
    
for(i=0; i<width; i++)
        
for(j=0; j<length; j++)
            scanf(
"%d", matrix[i]+j);

    solve(matrix, width, length);
    
return 0;
}


posted on 2011-06-17 20:00 simplyzhao 阅读(278) 评论(0)  编辑 收藏 引用 所属分类: M_面试题集锦


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜