1 条题解

  • 0
    @ 2025-8-24 21:59:02

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar wdcxz
    **

    搬运于2025-08-24 21:59:02,当前版本为作者最后更新于2018-08-02 20:58:03,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    c++代码

    比较水的模拟题,不过我也写了好久,最后发现只是数组开小了,改掉就对了。。。

    下面是解析:

    这题先把储存的数组全赋值为‘ . ’再求长度(因为宽度恒为5,不用求),长度等于5倍的字母个数减去字母个数最后加一,求出长度后,求第一个字母的位置,易得为3,之后每个位置都要加4,再根据每个字母的位置写出周围的符号,注意,这里有一个特判,若空间已被‘ * ’占掉,则什么也不干,最后输出即可

    #include <bits/stdc++.h>//万能头,好东西
    using namespace std;
    int len,lena,ll=3,aa;//ll为第一个字母的初始位置
    char a[20],b[1000][100],c;
    int main(){
    	cin>>a;//输入初始字符串
    	len=strlen(a);//求出字符串长度,strlen()函数能求出字符串长度
    	lena=4*len+1;//求出输出字符矩阵的长度,宽度恒为五
    	memset(b,'.',sizeof(b));//将b数组全赋值为‘.’,以便后来使用
    	while(ll<=lena){//开始循环
    		aa++;//到第aa个字母
    		if(aa%3==0)c='*';
    		else c='#';//若为3的倍数个,则用‘*’
    		b[3][ll]=a[aa-1];//把字母填入b数组中
    		b[1][ll]=c;
    		b[5][ll]=c;
    		b[2][ll-1]=c;
    		b[2][ll+1]=c;
    		b[4][ll-1]=c;
    		b[4][ll+1]=c;//根据字母的位置推出其他字符的位置,并填入b数组中
    		if(b[3][ll-2]!='*')b[3][ll-2]=c;
    		if(b[3][ll+2]!='*')b[3][ll+2]=c;//特判,若以被‘*’覆盖,则不能被‘#’覆盖
    		ll+=4;//之后每个字母的为止为前一个加4
    	}
    	for(int i=1;i<=5;i++){
    		for(int j=1;j<=lena;j++)
    			cout<<b[i][j];//输出
    		cout<<endl;//不要忘了每行要加回车
    	}
    	return 0;//end
    }
    //wdcxz
    
    • 1

    信息

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