| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1563 人关注过本帖
标题:一个c程序难题程序期待高手优化(程序我已写好)
取消只看楼主 加入收藏
liqingyulipeng
Rank: 1
等 级:新手上路
帖 子:63
专家分:3
注 册:2008-10-11
结帖率:77.78%
收藏
 问题点数:0 回复次数:1 
一个c程序难题程序期待高手优化(程序我已写好)
望高手在看完小弟的程序后能优化,使程序更精炼!!
题目:打印一个 N*N的方阵,N为每边字符的个数(3<N<20),要求最外层为“X”,第二层为“Y”,从第三层起每次依次打印数字0,1,2,3……
例如:当N=5时
X X X X X
X Y Y Y X
X Y 0 Y X
X Y Y Y X
X X X X X

程序:
#include <stdio.h>
#include <memory.h>

#define N 5//本程序构造并打印的方阵的边长为5
void small_partition(char a[N][N]);
void Print_Array(char a[N][N]);
void Copy(char a[N][N]);
/****************************************
*函数:int main(int argc,char *argv[])
*功能:构造方阵并打印
*****************************************/
int main(int argc,char *argv[])
{
    char a[N][N];//N*N方阵
    memset(a,0,N*N);
    small_partition(a);
    Copy(a);
    Print_Array(a);
    return 0;

}
/****************************************
*函数:void small_partition(char a[N][N])
*功能:构造方阵的八分之一
*说明:构造出的八分之一位于左上角
*****************************************/
void small_partition(char a[N][N])
{
    int i = 0;//行
    int j = 0;//列

    if(N%2 == 0)//偶数
    {
        for(j=0; j<N/2; j++)
        {
            a[0][j] = 'X';
        }
        for(j=1; j<N/2; j++)
        {
            a[1][j] = 'Y';
        }
        if(N>4)
        {
            char number = '0';
            for(i=2; i<N/2; i++)
            {
                for(j=i; j<N/2; j++)
                {
                    a[i][j] = number;
                }
                number++;
            }
        }
    }
    else//奇数
    {
        for(j=0; j<N/2+1; j++)
        {
            a[0][j] = 'X';
        }
        for(j=1; j<N/2+1; j++)
        {
            a[1][j] = 'Y';
        }
        if(N>4)
        {
            char number = '0';
            for(i=2; i<N/2+1; i++)
            {
                for(j=i; j<N/2+1; j++)
                {
                    a[i][j] = number;
                }
                number++;
            }
        }
    }
}
/************************************************************
*函数:void Copy(char a[N][N])
*功能:根据已经构造出的八分之一,用复制的方法填满整个方阵。
        因为方阵是一个完全对称的图形。
*说明:填满整个方阵分为三步:
        第一步:根据已构造出的八分之一,填满左上角(四分之一)
        第二步:根据已有的四分之一,填满方阵的上半部分(二分之一)
        第三步:根据已有的二分之一,填满整个方阵
*************************************************************/
void Copy(char a[N][N])
{
    int i = 0;
    int j = 0;
    
    if(N%2 == 0)//偶数
    {
        for(i=1; i<N/2; i++)
        for(j=0; j<=i; j++)
        {
            a[i][j] = a[j][i];
        }
        for(i=0; i<N; i++)
        for(j=N/2; j<N; j++)
        {
            a[i][j] = a[i][N-1-j];
        }
        for(i=N/2; i<N; i++)
        for(j=0; j<N; j++)
        {
            a[i][j] = a[N-1-i][j];
        }
    }
    else //奇数
    {
        for(i=1; i<N/2+1; i++)
        for(j=0; j<=i; j++)
        {
            a[i][j] = a[j][i];
        }
        for(i=0; i<N; i++)
        for(j=N/2; j<N; j++)
        {
            a[i][j] = a[i][N-1-j];
        }
        for(i=N/2; i<N; i++)
        for(j=0; j<N; j++)
        {
            a[i][j] = a[N-1-i][j];
        }
    }
}
/****************************************
*函数:void Print_Array(char a[N][N])
*功能:打印方阵
*****************************************/
void Print_Array(char a[N][N])
{
    int i=0;
    int j=0;

    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)
        {
            printf("%c ",a[i][j]);
        }
        printf("\n");
    }
}
搜索更多相关主题的帖子: 难题 期待 
2008-11-24 16:01
liqingyulipeng
Rank: 1
等 级:新手上路
帖 子:63
专家分:3
注 册:2008-10-11
收藏
得分:0 
谢谢大家的帮助!论坛里还真有高手!看来以后得多上来交流学习啦!我喜欢这样的气氛
2008-11-25 15:26
快速回复:一个c程序难题程序期待高手优化(程序我已写好)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059336 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved