问题描述
有一批箱子 (形式为字符串,设为str)
要求将这批箱子按从上到下以之字形的顺序摆放在行数为 n 的空地,请输出箱子的摆放位置
输入描述:
输入一行字符串,通过空格分隔,前面部分为字母或数字组成的字符串str,表示箱子;后面部分为数字n,表示空地的行数。例如:
输入:
ABCDEFGHIJKLMN 5
输出:
AJK
BIL
CHM
DGN
EF
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char str[1000];
int n;
scanf("%s %d", str, &n); //读入字符串和行数
int len;
len = strlen(str); //字符串的长度
int col;
col = (len - 1) / n + 1; //摆放n行后的总列数
char box[1000][1000] = { 0 }; //初始化二维数组
//将每个字符按之字型依次放入二维数组中,把二维数组想象成我们需要摆放箱子的空地
int k = 0;
for (int i = 0; i < col; i++) {
if (i % 2 == 0) { //列号为偶数(包括第0列),从上往下排列
for (int j = 0; j < n && k < len; j++) {
box[j][i] = str[k];
++k;
}
}
else { //列号为奇数,从下往上排列
for (int j = n - 1; j >= 0 && k < len; j--) {
box[j][i] = str[k];
++k;
}
}
}
//将二维数组依次输出
for (int i = 0; i < n; i++) {
for (int j = 0; j < col; j++) {
printf("%c", box[i][j]);
}
printf("\n"); //每一行输出完成后要手动换行进行下一行的输出
}
}