zoukankan      html  css  js  c++  java
  • 团体程序设计天梯赛PTA L1-002打印沙漏

    题意:通过给定的字符数和字符打印最大沙漏形状,并且在最后一行中输出剩下没用掉的符号数。

    解题思路:计算最大层数,用类似打印菱形的方法进行打印。需要注意的是,只打印前半部分的空格,后半部分空格打印会被判格式错误。

    第一次用模拟的方法进行打印。缺点:代码较长,不好维护,容易出错。

    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int n,x,y,i,j,k;
        char a;
        scanf("%d",&n);
        getchar();
        scanf("%c",&a);
        x=sqrt((n+1)/2);
        i=x;
        j=x;
        k=x;
        while(x!=0)
        {
            y=x*2-1;
            if(i==x)
            {
                while(y--)
                {
                    printf("%c",a);
                }
                printf("
    ");
            }
            else
            {
                i=j-x;
                while(i--)
                    printf(" ");
                while(y--)
                {
                    printf("%c",a);
                }
                printf("
    ");
            }
            x--;
        }
        i=2;
        x=2;
        while(x<=j)
        {
            y=2*x-1;
            if(j==x)
            {
                while(y--)
                {
                    printf("%c",a);
                }
                printf("
    ");
            }
            else
            {
                i=j-x;
                while(i--)
                    printf(" ");
                while(y--)
                {
                    printf("%c",a);
                }
                printf("
    ");
            }
            x++;
        }
        printf("%d",n-(2*k*k-1));
        return 0;
    }
    View Code

    第二次用几何方法进行打印,把整个图形看成一个整体,算出层数(x)后可设置两层循环从-x到x,分别代表行数和层数。

     1 #include <iostream>
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int n,x,y,k;
     8     char a;
     9     scanf("%d",&n);
    10     getchar();
    11     scanf("%c",&a);
    12     x=sqrt((n+1)/2);//计算层数
    13     x --;//最中间那层是第0层
    14     for(int i = -x; i <= x; i++)
    15     {
    16         for(int j = -x; j <= x; j++)
    17         {
    18             if(abs(j)<=abs(i))//如果列大于行的序号,就打印该给定字符
    19                 putchar(a);
    20             else if(abs(j)>abs(i) && j < 0)//空格只能输出前半部分,全部输出会报格式错误
    21                 putchar(' ');
    22         }
    23         putchar('
    ');
    24     }
    25     //输出剩余未用的字符数,可以通过这个公式反推前面的计算层数的公式。
    26     printf("%d
    ",n-(2*x*x+4*x+1));
    27     
    28     return 0;
    29 }
  • 相关阅读:
    include与php://input执行任意命令
    php Session反序列化漏洞
    php代码审计-file_get_contents()&file_put_contents()
    php代码审计-用户名和密码分开检验
    php -- get_magic_quotes_gpc()函数
    md5(“ffifdyop“,true)
    php弱类型相关
    BurpWeb安全学院之XXE
    ICMP隐藏通信隧道技术
    BurpWeb安全学院之敏感信息泄露
  • 原文地址:https://www.cnblogs.com/dark-ming/p/13600819.html
Copyright © 2011-2022 走看看