此复试题目是根据博主在考场上的记忆回忆复原的题目。为了恢复试题的原貌,我根据试题要求进行合理的脑补,按照oj系统的风格补全了试题的Problem Description、Input、Output、Sample Input、Sample Out等内容,并加入了详解、具体的代码实现。题目在卷子上的具体呈现形式是洛谷oj那个样子的,所以仅供大家参考。有什么错误、不合理的地方欢迎指出。
以下题目中的Sample Input数据除第三题外,都是我瞎编的。原创不易,还请大家多支持
Problem Description
Input
(1<=n<1000)
,接下来输入n个人的座位号,每个座位号用空格隔开
Output
Sample Input
Sample Output
#include
int main() {
int n, t, cnt1 = 0, cnt2 = 0;
scanf("%d", &n);
while (n--)
{
scanf("%d", &t);
if (t % 2 != 0)cnt1++;//统计成年人数
else cnt2++;//统计未成年数
}
printf("%d %.2f %d %.2f\n", cnt1, cnt1 * 1.0 / (cnt1 + cnt2), cnt2, cnt2 * 1.0 / (cnt1 + cnt2));//输出
}
Problem Description
Input
(1<=n<1000)
,接下来输入n个数字表示加入的n个木板的高度,每个高度用空格隔开
Output
Sample Input
Sample Output
#include
#include
using namespace std;
int arr[1000];
int main() {
int n, MAX = 0;
scanf("%d", &n);
for (int i = 1; i < n; i++)//输入每一个木板的高度
scanf("%d", &arr[i]);
for (int i = 1; i <= n; i++)//遍历每一个木板
for (int j = i+1; j <= n; j++)//遍历该木板后的每一个木板
MAX = max(MAX, (j - i) * min(arr[i], arr[j]));//计算当前两木板所能围成的体积,取最大值
printf("%d\n", MAX);
return 0;
}
Problem Description
I ′ ( i , j ) = ∣ ∑ y = − 1 + 1 ∑ x = − 1 + 1 S ( s − x , t − y ) × I ( i − x , j − y ) ∣ I'(i,j)=\left|\sum_{y=-1}^{+1}\sum_{x=-1}^{+1} S(s-x,t-y)×I(i-x,j-y)\right| I′(i,j)=∣∣∣∣∣y=−1∑+1x=−1∑+1S(s−x,t−y)×I(i−x,j−y)∣∣∣∣∣
Problem 1
Convolution(unsigned char* pI,unsigned char* S,int width,int height)
Problem 2
S t = [ − 1 − 2 − 1 0 0 0 1 2 1 ] St=\left[ \begin{matrix} -1 & -2 & -1\\ 0 & 0 & 0\\ 1 & 2 & 1 \end{matrix} \right] St=⎣⎡−101−202−101⎦⎤
Problem 3
unsigned char* readBmp(char fileName[100],unsigned char *pI,int width,int height)
,保存图片方法
void readBmp(char fileName[100],unsigned char *pIBuffer,int width,int height)
(以上两个方法不用实现)完成上题的卷积过程
Problem Description
Input
(1<=n<2000)
,接下来有m行每一行表示一对关系(输入每个数字代表一个人)
Output
Sample Input
Sample Output
#include
#include
int Tree[2000];
int findRoot(int x) {//查找当前x属于哪个朋友圈
if (Tree[x] == -1)return x;
int temp = findRoot(Tree[x]);
Tree[x] = temp;
return temp;
}
int main() {
int n, m, cnt = 0;
memset(Tree, -1, sizeof(Tree));
scanf("%d%d", &n, &m);
while (m--)
{
int a, b;
scanf("%d%d", &a, &b);
if (findRoot(a) != findRoot(b))//若a与b有朋友关系,且还没有在同一个朋友圈
{
Tree[a] = b;//并入该朋友圈
cnt++;//并入朋友圈的人数递增
}
}
printf("%d\n", n - cnt);
return 0;
}
这道题也比较简单,就是一个并查集的简单应用,题目的要求也很明确,就是求有多少个集合