L1-039 古风排版 (20分) 详解

思路:

 这道题不能想着一个一个输出,要先用一个字符数组把所有内容存取起来再输出。

还有值得注意的地方是要计算列数:int M = (s.length() + N- 1) / N;//得到所需要的列数,且N=1的情况下也成立,当字符数量不能被整除时,加入N-1能补全缺少的一列同时也不会加多一列

具体看代码~~

#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main()
{
	string s;
	int N;
	cin >> N;
	cin.ignore();//忽略上一句输入的换行符
	getline(cin, s);
	int M = (s.length() + N- 1) / N;//得到所需要的列数,且N=1的情况下也成立
	int k = 0;//控制字符的序号
	char c[105][15];
	for (int i = M - 1; i >= 0; i--)
	{
		for (int j = 0; j < N; j++)
		{
			if (k < s.length())
			{
				c[j][i] = s[k];
				k++;
			}
			else
				c[j][i] = ' ';
		}
	}
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < M; j++)
		{
			cout << c[i][j];
		}
		cout << endl;
	}

	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43535668/article/details/104528131