列表

详情


OR113. 拍照队形

描述

猿辅导公司的 N位(N>=4)研发同学组织了一次秋游活动,某同学带了个无人机在高空拍照,活动结束时,先拍了一张所有同学排成公司猴头Logo的照片, 接着有人提议再排成“猿”的首字母Y字形来拍一张合照。

用字符串中的每一个字符(不是换行符或结束符'\0')代表一位老师,输出排好后的队形。要求 Y字除去中心点外,上下半部分等高,按照从左到右,从上到下进行排序。队形中没人的部分用空格占位。
输入数据保证可以排出一个完整的Y字,即长度为 3k+1 (k>=1)

例如: 7个 x ,排成队形为(为了方便说明,这里用‘-’代替空格):
x---x
-x-x
--x
--x
--x

// 参考程序
#include <cstring>
#include <iostream>
#include <cstdio>
using namespace std;
char str[1010];
int N;
int main(){
    scanf("%d\n", &N);
    // TODO: 读入字符串,注意可能含空格

    // TODO: 输出拍照队形,没人用空格占位
    printf(" %c\n", str[0]);
}

输入描述

输入数据有两行,第一行输入N(N<=1000),表示字符串长度。
第二行输入字符串。

输出描述

用字符串表示的排好的队形,没人处用空格(' ')占位,行尾不能有多余字符,即每行最后一个字符(除了换行符以外),为字符串中代表该老师的字符。

示例1

输入:

4
a3f/

输出:

a 3
 f
 /

示例2

输入:

7
abcdefg

输出:

a   b
 c d
  e
  f
  g

示例3

输入:

10
iiiiiiiiii

输出:

i     i
 i   i
  i i
   i
   i
   i
   i

原站题解

C 解法, 执行用时: 3ms, 内存消耗: 504KB, 提交时间: 2020-07-16

#include<stdio.h>
#include<stdlib.h>

char arry[1000];
int N;
int num, i, j;
int a, b=0, c, k, n, m;
int main(){
    scanf("%d", &N);
    getchar();
    for(i = 0; i < N; i++){
        scanf("%c",&arry[i]);
    }
    num = (N - 1) / 3;
    for(j = 0; j < num; j++){
        k = 2 * num - (2 * j + 1);
        if(j != 0 && num != 1){
            for(a = 0; a < j; a++){
                printf(" ");
            }
            printf("%c", arry[b]);
            b++;
            for(n = 0; n < k; n++){
                printf(" ");
            }
            printf("%c\n", arry[b]);
            b++;
        }
        else if(j == 0){
            printf("%c", arry[b]);
            b++;
            for(n = 0; n < k;n++){
                printf(" ");
            }
            printf("%c\n", arry[b]);
            b++;
        }
    }
    int d = N-2*num;
    for(m = 0;m < d; m++){
        for(c = 0; c < num; c++){
            printf(" ");
        }
        printf("%c\n", arry[b++]);  
    }
    return 0;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 632KB, 提交时间: 2020-09-07

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    string str;
    cin>>n;
    getchar();
    getline(cin,str);
    int ln=(n-1)/3;
    string res;
    int j=0;
    for(int i=0;i<ln;i++)
    {
        res=string(i,' ')+str[j]+string(2*(ln-i)-1,' ')+str[j+1];
        cout<<res<<endl;
        j+=2;
    }
    for(int i=0;i<=ln;i++)
    {
        res=string(ln,' ')+str[j];
        cout<<res<<endl;
        j++;
    }
 
    return 0;
}

上一题