1 条题解

  • 0
    @ 2025-8-24 22:19:39

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Mikemao666
    科学研究不应该只追求表象,而是要通过实验去验证猜想,去获得真理。 ——沃斯特姆夫斯基•胡

    搬运于2025-08-24 22:19:39,当前版本为作者最后更新于2020-04-11 19:59:10,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    这次我要来一波完整丰富的分析。

    题意

    首先,输入四个数;前两个是报纸的行数、列数,后两个是放大镜的两个“参数”(具体后面会讲)。

    让后,按行数 r、列数 c 输入一个字符矩阵。

    这里我们就要想到:用二维数组

    让后,我们要按题目要求,把每一个小字符“放大”。

    那这里什么叫放大呢?

    题目解释: 把每个字符都转换成一个 zr 行 zc 列的矩阵。

    实际上就是:把原来的每一个字符复制zr行、复制zc列!

    但单个字符作矩阵输出是不现实的(程序按行输出)。

    所以我们想到:用四重循环!

    so……

    for(int i=1;i<=r;i++)
    	for(int j=1;j<=c;j++)
    		for(int m=1;m<=zr;m++)
    			for(int l=1;l<=zc;l++)
                putchar(a[m][l]);
    

    这就对了吗???

    错!

    这种写法过于想当然。 Dev:你第一次不是这样写的?

    我们要输出的,是由原来的字符组成的许多矩阵。

    其中的m、l只是用于控制放大行数、列数的,不能用作输出字符!

    输出工作应交给其中的i,j 。

    如果你上面都懂了,那这道题也差不多A了。

    **注意!**四重循环尤其小心!增量不要搞混!

    为此我调了数次,输出来什么都不知道

    code:

    #include<bits/stdc++.h>
    using namespace std;
    char a[55][55];
    int main () {
    	int r,c,zr,zc;//老老实实按题目定义 
    	cin>>r>>c>>zr>>zc;//r:原行数 c:原列数 zr:放大行数 zc放大列数 
    	for(int i=1;i<=r;++i){
    		for(int j=1;j<=c;++j){
    			cin>>a[i][j];
    		}
    	}//常规二维数组输入
    	for(int i=1;i<=r;i++){//四重循环 
    		//这里控制原行数 
    		for(int m=1;m<=zr;m++){
    			//枚举放大后的行数 
    			for(int j=1;j<=c;j++){
    				//这里控制原列数 
    				for(int l=1;l<=zc;l++)//枚举放大后的列数 
    					putchar(a[i][j]);//输出 (快捷) 
    			}	
    			printf("\n");//换行位置很重要 (在这一行所有列的字符输完 后再换行) 
    		}
    	}		
        return 0;
    }
    
    • 1

    信息

    ID
    5356
    时间
    1000ms
    内存
    32MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者