UVa 400 Unix 命令

这个题本身没什么难度,就是格式控制

vector<string>filenames;

typedef queue<string> Queue;

int main()
{
	// freopen("my_ans.txt", "w", stdout);
	int n;
	while (cin >> n) {
		cout << "------------------------------------------------------------\n" ;
		filenames.clear(); string longest="";
		int num = n;
		while (num--) { string name; cin >> name; longest = longest.size() > name.size() ? longest : name; filenames.push_back(name); }
		sort(filenames.begin(), filenames.end());
		queue<Queue> inOrder;

// 这里注意对行列数目的计算,row计算用n-1避免向上多输出空行,向下少输出数据的尴尬

		int column = (60 -longest.size()) / (longest.size()+2) +1, row = (n-1) / column + 1;
		for (int i = 0; i < row; i++)
		{
			Queue q;
			for (int j = i, c = 0; j < filenames.size() && c < column; c++, j += row) q.push(filenames[j]);
			inOrder.push(q);
		}
		for (int i = 0; !inOrder.empty(); i++)
		{
			Queue t = inOrder.front(); inOrder.pop();
			int lenthpre = longest.size() + 2.0, lenthtil = longest.size();
			bool need = !t.empty();
			while (!t.empty())
			{
				if (t.size() != 1) cout << setiosflags(ios::left) << setw(lenthpre)<< t.front() , t.pop();
				else cout << setiosflags(ios::left) << setw(lenthtil) << t.front() , t.pop();
			}
			if(need) cout << endl;
		}
	}
	return 0;
}

坑点就是row的计算,我反复用ceil函数和round函数修改条件...其实一步解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值