zoukankan      html  css  js  c++  java
  • uva 400 Unix ls 文件输出排版 排序题

    这题的需要注意的地方就是计算行数与列数,以及输出的控制。

    题目要求每一列都要有能够容纳最长文件名的空间,两列之间要留两个空格,每一行不能超过60。

    简单计算下即可。

    输出时我用循环输出空格来解决对齐的,其实可以用一个很巧妙的方法,用printf("%-*s", k, file[i]),查过资料后发现*放到转换字符之间可以当作替代符,后面可以输入一个变量(如k)来控制,这句代码意思是输出左对齐(对应负号)的宽度为k(对应*)的字符串file[i]。

    代码:

    #include <cstdio>
    #include <iostream>
    #include <cmath>
    #include <string>
    #include <algorithm>
    using namespace std;
    const int maxn = 101;
    int n;
    
    int main() {
    	string file[maxn];
    	int cmax;
    	while (scanf("%d", &n) != EOF) {
    		printf("------------------------------------------------------------
    ");
    		cmax = 0;
    		for (int i = 0; i < n; i++) {
    			cin >> file[i];
    			cmax = max(cmax, (int)file[i].size());
    		}
    		int col = 62 / (cmax + 2);
    		int row = ceil(1.0 * n / col);
    		sort (file, file + n);
    		for (int i = 0; i < row; i++) {
    			for (int j = 0; j < col; j++) {
    				//	printf("%s", file[i * row + j]);
    				int t = j * row + i;
    				if (t >= n)
    					continue;
    				cout << file[t];
    				int k = cmax - file[t].size();
    				while (k--)
    					printf(" ");
    				if (j != col - 1)
    					printf("  ");
    			}
    			if (i <= row - 1)
    				printf("
    ");
    		}
    	}
    	return 0;
    }


  • 相关阅读:
    C# 测试 modbusTCP 经验积累
    C#制作透明色GIF动画的类
    C# esc退出窗体
    让PPT演示文稿循环播放
    C# hex 转 float
    C# PowerPoint操作的基本用法。
    将listview的checkbox改成单选。
    google搜索栏设置
    如何在C++中实现Deprecated API Anthony
    只能用new生成的对象 Anthony
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3211804.html
Copyright © 2011-2022 走看看