hdu2091

来源:互联网 发布:买一个域名要多少钱 编辑:程序博客网 时间:2024/05/01 05:51
 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
 {
 char s;
 int i,j,k,n,flag=0;//flag标记次数,用于打回车
 while(scanf("%c",&s),s!='@')
 {
  scanf("%d",&n);
  if(flag>0)putchar('\n');
  if(n==1)
   printf("%c\n",s);
  else
   
  {
   for(i=1;i<=n-1;i++)
            {
    for(j=1;j<n+i;j++)
    {
     if(j==(n-i+1)||j==(n+i-1))
      printf("%c",s);
     else
      printf(" ");
    }
    putchar('\n');
   }
   for(i=0;i<2*n-1;i++)
    printf("%c",s);
   putchar('\n');
  }
 
  flag++;
  getchar();
 }
 return 0;
 }
 
 

/*很多人可能不知道'*'在格式化输入输出中的作用。

在scanf()中,用%*#,就代表读入一个#的数据,但不处理。比如:
scanf("%c%*c%c", &a, &b);
输入ABC,此时,变量a='A', c='C'。而中间的'B',只是读入,没有做任何处理。

在printf()中,%*#用来设定场宽。
我们平时用%2d一类的转义字符来代表输出整形d时场宽为2个字符,但这种方法设置场宽只能是常数,
不能在程序运行时其变化。
而用'*',就做到了可变场宽的作用。比如:
printf("%*d", 4, a);
表示输出整形数据a,场宽为4个字符。*/

 #include <stdio.h>
 
int main( )
{
 char c;
 int i = 0, n;
 while ((c = getchar()) != '@')
    {
        scanf("%d%*c", &n);
  
  printf(i ? "\n%*c\n" : "%*c\n", n, c);
  if (n == 1)
        {
            i = 1;
            continue;
         }
  for (i = 1; i + 1 < n; i++)
   printf("%*c%*c\n", n - i, c, i * 2, c);
  for (i = 0; i < 2 * n - 1; i++)
   putchar(c);
  putchar('\n');
    }
 return 0;
 }

原创粉丝点击