• 题解洛谷P1538【迎春舞会之数字舞蹈】


    方法:暴力,判断,输出

    本题为了更好理解建议各位可以复制样例来研究,甚至可以复制题解来测试思想,相信大家不会抄。

    有什么不好的请大佬们在评论里指出,谢谢


    #include <bits/stdc++.h>//头文件,万能,手动滑稽 
    using namespace std;//开辟名称空间 
    int k,x,js;//x表示总行数,k表示要摆出数字的大小,js表示 
    string a;//第二排数字 
    int main()//开始 
    {
        /*
        cout<<"123456--123--        --   --   --123--   --   -- "<<endl;
        cout<<"123|1234|1234|1|12|1|1234|12 1234| |  | |  | |12|"<<endl;
        cout<<"   |    |    | |  | |    |       | |  | |  | |  |"<<endl;
        cout<<"      --   --   --   --   --        --  1--      "<<endl;
        cout<<"   | |       |    |    | |  |    | |  |    | |  |"<<endl;
        cout<<"   | |       |    |    | |  |    | |  |    | |  |"<<endl;
        cout<<"      --   --        --   --        --   --   -- "<<endl;   
        //这里是复制样例来看空格,为了一目了然这一切。 
        //发现相邻两个数字之间有两个空格,数字中间的空格是k。
        //要画"-"那一行要空一个格。
        //第一个数字要顶格
        //注意第一个数字是1时不要中陷阱,就是认为刚开始要空3格 
        */
        cin>>k;//输入数字大小 
        cin>>a;//输入要输出的数字 
        x=3+k*2;//发现的规律,计算总共多少行 
        for(int i=1;i<=x;i++)//进入第一层循环一共要画3+k*2行 
        {
            if(i==1 || i==2+k*1 || i==3+k*2)cout<<" ";//规律的应用,画"-"那一行要空一个格。
            for(int j=0;j<a.size();j++)//进入第二层循环,用处:画每行要画的东西。 
            {
                if(j!=0)cout<<" ";//如果不是第一个格就空一个,具体在上面的图中找的 
                if(i==1)//如果是第一行 
                {
                    if(a[j]=='2' ||a[j]=='3' || a[j]=='5' || a[j]=='6' || a[j]=='7' || a[j]=='8'||a[j]=='9'||a[j]=='0')//判断要画"-"的数字 
                    {
                        for(int kkksc03=1;kkksc03<=k;kkksc03++)cout<<'-';//画出"-" 
                        cout<<"  ";//相邻两个数字之间有两个空格
                    }
                    else //如果不是那些数字就不画'-'
                    {
                        for(int kkksc03=1;kkksc03<=k;kkksc03++)cout<<' ';//用空格代替"-" 
                        cout<<"  ";//相邻两个数字之间有两个空格
                    }
                }
    
                if(i!=1 && i<2+k*1)//如果在第一行和中间行之间画'|'的地方也就是数字的上半部分 
                {
                    if(a[j]=='1' || a[j]=='2' || a[j]=='3' || a[j]=='7')//判断在右边画'|'的数字
                    {
                        cout<<" ";//替代左边的'|' 
                        for(int psb=1;psb<=k;psb++)cout<<" ";//数字中间的空格 
                        cout<<'|';//画'|' 
                    }
                    if(a[j]=='5' || a[j]=='6')//判断在左边画'|'的数字
                    {
                        cout<<'|';//画'|' 
                        for(int psb=1;psb<=k;psb++)cout<<" "; //数字中间的空格
                        cout<<" ";//替代右边的'|' 
                    }
                    if(a[j]=='4' || a[j]=='8' ||a[j]=='9'||a[j]=='0')//判断两边都要画'|'的数字 
                    {
                        cout<<'|';//画'|' 
                        for(int psb=1;psb<=k;psb++)cout<<" "; //数字中间的空格
                        cout<<'|';//画'|' 
                    }
                }
    
                if(i==2+k*1)//判断是否在中间那行 
                {
                    if(a[j]=='2' ||a[j]=='3' || a[j]=='5' || a[j]=='6' || a[j]=='4' || a[j]=='8'||a[j]=='9')//判断要画"-"的数字 
                    {
                        for(int kkksc03=1;kkksc03<=k;kkksc03++)cout<<'-';//画出"-"
                        cout<<"  ";//相邻两个数字之间有两个空格
                    }
                    else  //如果不是那些数字就不画'-'
                    {
                        for(int kkksc03=1;kkksc03<=k;kkksc03++)cout<<' ';//用空格代替"-" 
                        cout<<"  ";//相邻两个数字之间有两个空格
                    }
                }
    
                if(i>2+k*1 && i!=3+k*2)//判断是否在数字的下半部分要画'|'的那k行 
                {
                    if(a[j]=='1' || a[j]=='3' || a[j]=='4' || a[j]=='5' || a[j]=='7' ||a[j]=='9')//判断右边要画'|'的数字 
                    {
                        cout<<" ";//替代左边的'|' 
                        for(int psb=1;psb<=k;psb++)cout<<" ";//数字中间的空格
                        cout<<'|';//画'|' 
                    }
                    if(a[j]=='2')//判断左边要画'|'的数字 
                    {
                        cout<<'|';//画'|' 
                        for(int psb=1;psb<=k;psb++)cout<<" "; //数字中间的空格
                        cout<<" ";//替代右边的'|' 
                    }
                    if(a[j]=='6' || a[j]=='8' || a[j]=='0')//判断两边都要画'|'的数字 
                    {
                        cout<<'|';//画'|' 
                        for(int psb=1;psb<=k;psb++)cout<<" ";//数字中间的空格 
                        cout<<'|';//画'|' 
                    }
                }
    
                if(i==3+k*2)//判断是否在最后一行那行 
                {
                    if(a[j]=='2' ||a[j]=='3' || a[j]=='5' || a[j]=='6' || a[j]=='8' || a[j]=='9'||a[j]=='0')//判断要画"-"的数字 
                    {
                        for(int kkksc03=1;kkksc03<=k;kkksc03++)cout<<'-';//画出"-"
                        cout<<"  ";//相邻两个数字之间有两个空格
                    }
                    else //如果不是那些数字就不画'-' 
                    {
                        for(int kkksc03=1;kkksc03<=k;kkksc03++)cout<<' ';//用空格代替"-" 
                        cout<<"  ";//相邻两个数字之间有两个空格
                    }
                }
            }
            cout<<endl; //换行,重!!!! 
        } 
    
          return 0;//结束 
    }
    作者:BiuBiu_Miku

    -----------------------------------------------

    个性签名:天生我材必有用,千金散尽还复来!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

  • 相关阅读:
    Lua大整数的实现
    std::allocator在stl容器中使用问题
    深度学习框架安装
    Tensorflow安装使用一段时间后,import时出现错误:ImportError: DLL load failed
    论文解读:SIFA
    多位微软MVP推荐,第一本ASP.NET Core 3.1的书来了
    ASP.NET Core 进程内与进程外的性能对比
    基于Netty的程序主动发送消息
    dbroot文件结构解析(一)
    qtree文件结构解析(二)
  • 原文地址:https://www.cnblogs.com/BiuBiu-Miku/p/12248352.html
Copyright © 2020-2023  润新知