1 条题解

  • 0
    @ 2025-8-24 21:28:33

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar kkxacj
    Full of Hope.

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

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

    以下是正文


    P1740 题目传送门

    题意

    先输出输入的 nn

    再将原题中的输入菱形改为矩形输出。

    11 表示有边,00 表示无边。

    思路

    读题可知,棱形会从右上到左下的顺序变为矩阵,可先找起点的坐标,然后往右下打印,其中,输出奇数边时有 nn 条边,偶数时有 n1n-1 条边。棱形有 2n+12n+1 行,我们可以开一个大小为 2n+12n+1 的字符串。

    注意:本题菱形里可能有空格

    所以记得用

    getline(cin,s[i]);
    

    根据样例,起点的 xx 坐标只会为每一行的第 1,21,2 条边,yy 坐标隔两次加 11,得出

    x=1+(i+1)/2x=1+(i+1)/2

    y=ni/2y=n-i/2

    code

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,o,x,y;
    string s[1900];
    int main()
    {
    	scanf("%d",&n); //cin >> n;
    	printf("%d\n",n); //cout << n << endl; 
    	m = 2 * n + 1;
    	while(m--) getline(cin,s[++o]);//o++,getline(cin,s[o]);
    	for(int i = 1;i <= 2 * n + 1;i++)
    	{
    		m = n,x = 1 + (i + 1) / 2,y = n - i / 2;
    		if(i % 2 == 0) m++;
    		while(m--)
    		{
    			if(s[x++][y++] == ' ') printf("0"); //如果是空格,x++和y++可以写在后面
    			else printf("1");
    		}
    		cout << endl; //换行,别忘了
    	}
    	return 0;
    }
    
    
    • 1

    信息

    ID
    717
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者