1 条题解

  • 0
    @ 2025-8-24 21:20:27

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ZUTTER_
    **

    搬运于2025-08-24 21:20:26,当前版本为作者最后更新于2017-10-29 11:12:30,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    重点重点啦(敲黑板):思路是先把图形存在数组中,然后从后往前,从下往上,从左往右依次覆盖。

    ###例

                   +---+     +---+          +---+        
                  /   /|    /   /|         /   /|        
                 +---+ |   +---+ |        +---+ |        
         +---+   |   | +   |   | +---+    |   | +---+    
        /   /|   |   |/|   |   |/   /|    |   |/   /|    
       +---+ |   +---+ |   +---+---+ |    +---+---+ |    
       |   | +   |   | +   |   |   | +   /   /|   | +    
       |   |/    |   |/    |   |   |/   +---+ |   |/     
       +---+     +---+     +---+---+    |   | +---+      
                                        |   |/           
                                        +---+            
    

    重点是要找到每个立方体输出的位置,程序里有讲

    至于输出每个立方体,打个表就好了吖( ̄▽ ̄)/

    ##程序

    #include<iostream>
    #include<stdio.h>
    
    using namespace std;
    
    int i,m,n,j,k,l,o,p,a[1001][1001],ma[1001],maxx,maxy,z[6]={2,1,0,0,0,0},s[6]={6,6,6,6,5,4};
    
    char c[1001][1001],c1[10][10]={
    "  +---+",
    " /   /|",
    "+---+ |",
    "|   | +",
    "|   |/",
    "+---+",
    };//打表( ̄▽ ̄)/
    
    void fg(int x,int y)
    {
        int i,j;
        for(i=5;i>=0;i--)//立方体需要倒过来存入数组
            for(j=z[i];j<=s[i];j++)//分别是这一行的宽度
            {
                c[5-i+x][j+y]=c1[i][j];
                if(5-i+x>maxx) maxx=5-i+x;
                if(j+y>maxy) maxy=j+y;//分别记录最大长宽
            }
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++)
            for(j=0;j<m;j++)
                scanf("%d",&a[i][j]);
        for(o=1;o<=n;o++)//层数
            for(k=0;k<m;k++)//列循环
                for(l=0;l<a[o][k];l++)//高度
                    fg((n-o)*2+1+3*l,(n-o)*2+1+4*k);//表示立方体左下角位置
    
        for(i=maxx;i>=1;i--)
        {    
            for(j=1;j<=maxy;j++)
                if(c[i][j]=='\000') printf(".");
                else printf("%c",c[i][j]);
            printf("\n");
        }
    }
    

    居然做出了第四题,鸡冻到内牛满面(*/ω\*)

    • 1

    信息

    ID
    60
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    1
    已通过
    1
    上传者