星号菱形的输出

作者在 2008-07-06 03:43:40 发布以下内容
输入一个正整数 N ( 0 〈 N 〈 78 ),输出以N为对角线的空心菱形 , 测试多组数据 , EOF结束输入. 
 
input
 
5
 
output
 
..*..
.*.*.
*...*
.*.*.
..*..
 
 
注意: '.' 为空格 .
 
 
下面是我写的代码,当输入偶数和EOF程序结束, 可以输出空心和实心的菱形,输出实心只要将相应的正整数以负数输入就可以了。目前没有去OJ过。因为网页禁止访问,下次找个机会吧。
我运行了一下,在可以看得明显的情况下,最大输入为79。
 
IDE: CODE::BLOCKS 8.02
COMPILE: GNU
 
#include 〈 stdio.h 〉    /*  空间显示有BUG,所以减括号也汉语输入,最后有代码图 */
 
#define NL putchar('\n')  /*  换行  */
#define XX putchar('*')   /*  星星  */
#define KB putchar(' ')  
/*  空格  */
 
int main(void)
{
    int n ;
 
    while( scanf( "%d" , &n ) != EOF && n%2 )
    {
         int sign ;  /* 对输入数的符号的标记 */
 
         if ( n0 ) sign=0 ; else { sign=1 ; n*=-1 ; } /* 标记过程 */
 
         int ac = n*n , mid = n*(n/2+1) ; /* 计算中的'*'和' '的数目 还有 转换点 */
         int xr = ac - n/2 - 1 , xl ;     /* XR为右边的'*'XL为左边的'*'         */
 
         for( xl=xr ; ac-- ; ac%n ? 1 : ( NL, xrmid ? ( xr-=n-1 , xl-=n+1 ) : ( xr-=n+1 , xl-=n-1 ) ) )
         {
            ( ac == xr || ac == xl ||  ( acxl && acxr && sign ) ) ? XX : KB ;
         }

    }
 
    return 0;
}
 
 
空心可见最完全:
 
 
实心:
 
 
 
代码图:
 
 
 
 
 
MCP | 阅读 2737 次
文章评论,共0条
游客请输入验证码