程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UVA 400 - Unix ls(排版題)

UVA 400 - Unix ls(排版題)

編輯:C++入門知識

  該題中主要用到了整型相除截斷的技巧。例如,計算行數和輸出時候判斷是否為最後一列。   [cpp]   #include <stdio.h>   #include <stdlib.h>   #include <string.h>      int cmp(const void *_a, const void *_b) {       char *a = (char*)_a;       char *b = (char*)_b;          return strcmp(a, b);   }      // 根據len長度的字符串,不足以空格補齊   void print(char st[], int len) {       int tmp = len - strlen(st);       printf("%s", st);       while (tmp--)           printf(" ");   }      int main() {       int n;       char s[105][65];          while (scanf("%d", &n) != EOF) {           int lMax, c, r;           lMax = c = r = 0;           for (int i=0; i<n; i++) {               scanf("%s", s[i]);               int tmp = strlen(s[i]);               if (tmp > lMax)                   lMax = tmp;           }           c = 62 / (lMax+2);                      // 計算列數           r = (n+c-1) / c;                        // 計算行數              qsort(s, n, sizeof (s[0]), cmp);              printf("------------------------------------------------------------\n");           for (int i=0; i<r; i++) {               for (int j=0; j<c; j++) {                   int tmp = j*r + i;                      if (tmp >= n) continue;                      if (tmp >= ((int)((n-1)/r))*r)  // 如果為最後一列                       print(s[tmp], lMax);                   else                       print(s[tmp], lMax+2);               }               printf("\n");           }          }          return 0;   }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved