POJ 2136 Vertical Histogram 列印特殊圖形,pojhistogram
根據題目要求列印出需要的輸出格式。
這算是些趣味題目了,題目本身不難,要說痛點就是考如何優雅地去編程了,主要是考編程基礎功力。
而且好像測試系統不是十分嚴格,並不判斷後面多餘的空格,按題目要求是需要嚴格去掉後面多餘的空格的。
處理這個問題就需要多點代碼了。
下面看我使用一個額外的數組spaceHeight[ALP_LEN[來解決這個問題,做到半個多餘的空格符也沒有。
#include <cstdio>#include <string.h>const int MAX_N = 75;const int ALP_LEN = 26;const int LINE_N = 4;short height[ALP_LEN];short spaceHeight[ALP_LEN];char chs[MAX_N];inline int max(int a, int b) { return a > b ? a : b; }inline void getAlphaCount(char str[]){int i = 0;while (str[i]){if ('A' <= str[i] && str[i] <= 'Z') height[str[i]-'A']++;i++;}}int main(){while (gets(chs)){memset(height, 0, sizeof(height));getAlphaCount(chs);for (int i = 0; i < LINE_N-1; i++){gets(chs);getAlphaCount(chs);}spaceHeight[ALP_LEN-1] = height[ALP_LEN-1];for (int i = ALP_LEN-2; i >= 0; i--){spaceHeight[i] = max(spaceHeight[i+1], height[i]);}for (int h = spaceHeight[0]; h > 0; h--){for (int j = 0; j < ALP_LEN; j++){if (spaceHeight[j] < h) break;if (j > 0) putchar(' ');if (height[j] < h) putchar(' ');else putchar('*');}putchar('\n');}for (int i = 0; i < ALP_LEN; i++){if (i > 0) putchar(' ');putchar(char(i+'A'));}putchar('\n');}return 0;}
ACM解題報告
一個POJ題目分類
主流演算法:
1.搜尋 //回溯
2.DP(動態規劃)
3.貪心
4.圖論 //Dijkstra、最小產生樹、網路流
5.數論 //解模線性方程
6.計算幾何 //凸殼、同等安置矩形的並的面積與周長
7.組合數學 //Polya 定理
8.類比
9.資料結構 //並查集、堆
10.博弈論
1、 排序
1423, 1694, 1723, 1727, 1763, 1788, 1828, 1838, 1840, 2201, 2376,
2377, 2380, 1318, 1877,1928, 1971, 1974, 1990, 2001, 2002, 2092, 2379,
1002(需要字元處理,排序用快排即可) 1007(穩定的排序) 2159(題意較難懂)
2231 2371(簡單排序) 2388(順序統計演算法) 2418(二叉排序樹)
2、 搜尋、回溯、遍曆
1022,1111,1118,1129,1190,1562,1564,1573,1655,2184 ,2225,2243,2312,2362,2378,2386,1010,1011,1018,1020,1054,1062,1256,1321,1363,1501,1650,1659,1664,1753,2078,2083,2303,2310,2329
簡單:1128, 1166, 1176, 1231, 1256, 1270, 1321, 1543, 1606, 1664,
1731, 1742, 1745, 1847,1915, 1950, 2038, 2157, 2182, 2183, 2381, 2386, 2426
不易:1024, 1054, 1117, 1167, 1708, 1746, 1775, 1878, 1903, 1966, 2046,
2197, 2349
推薦:1011, 1190, 1191, 1416, 1579, 1632, 1639, 1659, 1680, 1683, 1691,
1709, 1714, 1753,1771, 1826, 1855, 1856, 1890, 1924, 1935, 1948, 1979, 1980, 2170,2288, 2331, 2339,2340,1979(和迷宮類似),1980(對剪枝要求較高)
3、 曆法
1008 2080 (這種題要小心)
4、 枚舉
1012,1046, 1387, 1411, 2245, 2326, 2363, 2381,1054(剪枝要求較高),1650 (小數的精度問題)
5、 資料結構的典型演算法
容易:1182, 1656, 2021, 2023, 2051, 2153, 2227, 2236, 2247, 2352,
2395
不易:1145, 1177, 1195, 1227, 1661, 1834
推薦:1330, 1338, 1451, 1470, 1634, 1689, 1693, 1703, 1724, 1988, 2004,
2010, 2119, 2274
1125(弗洛伊德演算法) ,2421(圖的最小產生樹)
6、 動態規劃
1037 A decorative fence、
1050 To the Max、
1088 滑雪、
1125 Stockbroker Grapevine、
1141 Brackets Sequence、
1159 Palindrom......餘下全文>>
翻譯http://pojorg/problem?id=2136翻譯其中的描述就可以
說明 請編寫程式,從輸入檔案讀入四行全大寫的文本輸入(每行不超過72字元),並列印縱向柱狀圖,顯示此全大寫輸入中每個字母(不包括空格、數字和標點)出現的次數。輸出格式正如以下所示。 輸入 *行1至4:四行全大寫文本,每行不超過72字元 輸出 *行1至??:若干行星號和空格,緊接一行大寫字母,以空格隔開。每行後面不要列印不需要的空格。之前不要列印空白行。 輸入例 THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG. THIS IS AN EXAMPLE TO TEST FOR YOUR HISTOGRAM PROGRAM. HELLO! 輸出例 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z