王道机考系列——哈希的应用与排版问题
哈希的应用与排版问题
Hash的应用
-
统计某个成绩的学生的人数;
-
给定n个整数,输出前m大的数
使用桶排序的思路来做。
排版题
1. 梯形排版
输入一个数h,输出一个上底为h,高为h的梯形。
如:
3
***
*****
*******
#include <iostream>
using namespace std;
int main() {
int n;
int space = 0;
int out = 0;
while(scanf("%d", &n) != EOF) {
for(int i = 1; i <= n; i++) {
space = (n - i) * 2;
out = n + (i - 1) * 2;
while(space--)
cout << " ";
while(out--)
cout << "*";
cout << endl;
}
}
return 0;
}
2. 叠箩筐
题目描述:
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
输入:
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
输出:
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
样例输入:
11 B A
5 @ W
样例输出:
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
@@@
@WWW@
@W@W@
@WWW@
@@@
#include <iostream>
using namespace std;
int main() {
int n;
char in;
char out;
char temp;
int head = 0;
char arr[80][80];
while(scanf("%d %c %c", &n, &in, &out) == 3) {
arr[0][0] = arr[0][n - 1] = ' ';
arr[n - 1][0] = arr[n - 1][n - 1] = ' ';
arr[n / 2][n / 2] = in;
bool bin = false;
bool bout = true;
for (int i = n / 2 - 1; i > 0; i--) {
if (bout && !bin) {
temp = out;
bout = false;
bin = true;
} else if (bin && !bout){
temp = in;
bin = false;
bout = true;
}
for (int j = i; j < n - i; j++) {
arr[i][j] = temp;
arr[n - i - 1][j] = temp;
}
for (int k = i + 1; k < n - i - 1; k++) {
arr[k][i] = temp;
arr[k][n - i - 1] = temp;
}
}
if (bin)
temp = in;
else if (bout)
temp = out;
head = n - 2;
for (int head = 1; head < n - 1; head++) {
arr[0][head] = temp;
arr[n - 1][head] = temp;
arr[head][0] = temp;
arr[head][n - 1] = temp;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << arr[i][j];
}
cout << endl;
}
}
return 0;
}