首页 > 试题广场 >

拍照队形

[编程题]拍照队形
  • 热度指数:6767 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
猿辅导公司的 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
说白了就是空格打印,只需找到行数2k+1和对应位置的空格数
n = int(input())
s = input()
k = (n - 1) // 3
line = 2 * k + 1
i = 0  #前k行下标
j = 0 #数组下标
while i < k:
    for _ in range(i): print(' ', end='')
    print(s[j], end='')
    j +=1
    for _ in range(2*k-1-2*i): print(' ', end='')
    print(s[j])
    j += 1
    i +=1
i = 0   # 后k+1行下标
while i<=k:
    for _ in range(k): print(' ', end='')
    print(s[j])
    j += 1
    i +=1


发表于 2020-08-15 17:09:58 回复(0)
n = int(input())
n_th = n // 3
data = input()
head = list(data[:n-n_th-1])
tail = list(data[n-n_th-1:])
for i in range(n_th, 0, -1):
    print(' ' * (n_th - i) + head.pop(0) + ' ' * (2 * i - 1) + head.pop(0))
for i in tail:
    print(' ' * n_th + i)
分两部分打印
发表于 2019-10-07 15:45:55 回复(0)
n = int(input())
s = input()
c = n // 3 * 2 + 1
half = n // 3
for i in range(half):
    print(' ' * i + s[2 * i] + ' ' * (half * 2 - 1 - 2 * i) + s[2 * i + 1])
print(half * ' ' + s[half * 2])
for i in range(1,half + 1):
    print(half * ' ' + s[half * 2 + i])

编辑于 2019-09-01 19:37:04 回复(0)
n = int(input())
str0 = input()
li = []
for i in range(len(str0)):
    li.append(str0[i])
k = int((n-1)/3)
for i in range(k):
    for j in range(i):
        print(' ',end='')
    print(li[2*i],end = '')
    for j in range(i+1,2*k-i):
        print(' ',end = '')
    print(li[2*i+1])
for i in range(k+1):
        print(' '*k,end = '')
        print(li[2*k+i])

编辑于 2019-01-03 20:29:47 回复(0)