zoukankan      html  css  js  c++  java
  • PAT (Basic Level) Practise:1027. 打印沙漏

    【题目链接】

    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

    *****
     ***
      *
     ***
    *****
    

    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式:

    输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。

    输出格式:

    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

    输入样例:

    19 *
    

    输出样例:

    *****
     ***
      *
     ***
    *****
    2

    【提交代码】

      1 #include <stdio.h>
      2 
      3 int count(n)
      4 {
      5     if(n == 1)
      6         return 1;
      7     else
      8         return count(n-1)+4*n-2;
      9 }
     10 
     11 void printf_t(int N, int n, char c)
     12 {
     13     int i;
     14     if(n == 1)
     15     {
     16         for(i = 0; i < N - n; i++)
     17             printf(" ");
     18         printf("%c", c);
     19         printf("
    ");
     20         return ;    
     21     }    
     22     else
     23     {
     24         for(i = 0; i < N - n; i++)
     25             printf(" ");
     26         for(i = 0; i < 2*n-1; i++)
     27             printf("%c", c);
     28         printf("
    ");
     29         printf_t(N, n-1, c);    
     30     }
     31 }
     32 
     33 void printf_b(int N, int n, char c)
     34 {
     35     int i;
     36     if(n == N)
     37     {
     38         for(i = 0; i < 2 * n + 1; i++)
     39             printf("%c", c);
     40         printf("
    ");
     41         return ;    
     42     }
     43     else
     44     {
     45         for(i = 0; i < N - n; i++)
     46             printf(" ");
     47         for(i = 0; i < 2 * n + 1; i++)
     48             printf("%c", c);
     49         printf("
    ");
     50         printf_b(N, n+1, c);
     51     }
     52 }
     53 
     54 void printf_n(int n, char c)
     55 {
     56     int i, j;
     57 
     58     for(i = n; i > 0; i--)
     59     {
     60         for(j = n - i; j > 0; j--)
     61             printf(" ");
     62         for(j = 0; j < 2 * i - 1; j++)
     63             printf("%c", c);
     64         printf("
    ");     
     65     }
     66     
     67     for(i = 1; i < n; i++)
     68     {
     69         for(j = n - i; j > 1; j--)
     70             printf(" ");
     71         for(j = 0; j < 2 * i + 1; j++)
     72             printf("%c", c);
     73         printf("
    ");         
     74     }
     75 }
     76 
     77 
     78 int main(void)
     79 {
     80     char c;
     81     int n, N, T1, T2;
     82 
     83     scanf("%d %c", &N, &c);
     84 
     85     n = 1;
     86     while(N >= (T1 = count(n)))
     87     {
     88         n++;
     89         T2 = T1;
     90     }
     91     n--;
     92 
     93     //printf_t(n, n, c);
     94     //printf_b(n-1, 1, c);
     95     //printf("%d", N - T2);
     96   
     97     printf_n(n, c);
     98     printf("%d", N - T2);
     99   
    100     return 0;
    101 }
  • 相关阅读:
    简单SSO(Single signon)的另类实现方式,钩子技术
    URL
    [恢]hdu 1287
    [恢]hdu 1220
    [恢]hdu 1015
    [恢]hdu 2095
    [恢]hdu 1862
    HDOJ 300!
    [恢]hdu 1029
    [恢]hdu 1016
  • 原文地址:https://www.cnblogs.com/utank/p/4158836.html
Copyright © 2011-2022 走看看