作者在 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(' ') /* 空格 */
#define XX putchar('*') /* 星星 */
#define KB putchar(' ') /* 空格 */
int main(void)
{
int n ;
{
int n ;
while( scanf( "%d" , &n ) != EOF && n%2 )
{
int sign ; /* 对输入数的符号的标记 */
{
int sign ; /* 对输入数的符号的标记 */
if ( n〉0 ) 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为左边的'*' */
int xr = ac - n/2 - 1 , xl ; /* XR为右边的'*'XL为左边的'*' */
for( xl=xr ; ac-- ; ac%n ? 1 : ( NL, xr〉mid ? ( xr-=n-1 , xl-=n+1 ) : ( xr-=n+1 , xl-=n-1 ) ) )
{
( ac == xr || ac == xl || ( ac〉xl && ac〈xr && sign ) ) ? XX : KB ;
}
{
( ac == xr || ac == xl || ( ac〉xl && ac〈xr && sign ) ) ? XX : KB ;
}
}
return 0;
}
}
空心可见最完全:
实心:
代码图: