试卷情况
试卷包括不定项选择题11道,填空题11道,编程题2道,限时120分钟。
第一道编程题
题目:一个厨师出售1-6六种不同的食物,每种食物都需要使用各自的特殊厨具,厨师的灶台最多只能同时摆放3种厨具,所以厨师决定空间不够时更换最久没使用过的厨具,每种食物烹饪都需要15分钟,更换一次厨具需要6分钟,请计算按点单顺序完成点单列表所需时间。(请使用c语言完成)
输入描述:每行一个数字,1-6代表6种订单,0代表订单开始,7代表结束。
输出描述:一个数字,代表厨师需要的总时间。
备注:应该是考察最近最少使用(LRU)的思想,但不能使用STL容器。
#include <stdio.h>
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int main() {
int t;
scanf_s("%d", &t);
if (t == 0) {
scanf_s("%d", &t);
}
int a = t, b = 0, c = 0, ans = 15;
while (1) {
scanf_s("%d", &t);
if (t == 7) {
break;
}
ans += 15;
if (b == 0) {
if (a == t) {
continue;
}
b = t;
continue;
}
if (c == 0) {
if (a == t) {
swap(&a, &b);
continue;
}
if (b == t) {
continue;
}
c = t;
continue;
}
if (t == a) {
swap(&a, &b);
swap(&b, &c);
continue;
}
if (t == b) {
swap(&b, &c);
continue;
}
if (t == c) {
continue;
}
swap(&a, &b);
swap(&b, &c);
c = t;
ans += 6;
}
printf("%d\n", ans);
return 0;
}
第二道编程题
题目:小明参加机器人大赛,比赛的场地是一个n*m的方块。现在规定,机器人从左上角出发,前往右下角,因为时间紧张,小明只设计出最简单的智能算法,他的机器人只会向下或者向右。小明现在想知道,一共有多少种方案能到达终点。
输入描述:输入的第一行是两个整数n,m(1≤n,m≤10),接下来的n行有m个数字,数字只会是0或者1,0代表可以通行,1代表障碍物,数据保证终点一定是0。
输出描述:一个整数ans,表示方案数。数据随机生成,且保证答案不超过2^31。
备注:动态规划题,本小白做不出来,后来查到网上有Java题解:https://blog.csdn.net/zhangxxin/article/details/115735641,发现思路还挺简单,我按该思路用C++复现了一遍,感觉自己还是要多练练动态规划。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> g(n, vector<int>(m, 0));
vector<vector<int>> dp(n, vector<int>(m, 0));
int t;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> t;
g[i][j] = t;
}
}
for (int i = 0; i < n; ++i) {
if (g[i][0] == 1) {
break;
}
dp[i][0] = 1;
}
for (int i = 0; i < m; ++i) {
if (g[0][i] == 1) {
break;
}
dp[0][i] = 1;
}
for (int i = 1; i < n; ++i) {
for (int j = 1; j < m; ++j) {
if (g[i][j] == 1) {
continue;
}
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
cout << dp[n - 1][m - 1] << endl;
return 0;
}
本人只是一名编程小白,写博客是为了总结和交流,恳请大家批评指正!