0522 考试总结
1.应该有思路的情况,就可以全部都做,如果前两道有一道有思路,就直接快速解决,马上做第3题。
习题3暴露出来的问题 -- :
1.输入与输出不熟练,卡了很久没有搞明白 get_s 和 scanf_s 为什么会出现get少了一个字符
2.输出结果一直不正确
--- 这一题其实已经完全做出来了,但输入输出一直没有搞对,现在的输入输出是可以的,待确认。
```
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define TOTAL_MEM 100
#define BUF_LEN 64
#define OUT_BUF_LEN 64
int g_pool[TOTAL_MEM] = {0};
int g_allocSize[TOTAL_MEM] = {0};
void MemPoolInit(void)
{
int i;
for (i = 0; i < TOTAL_MEM; i++) {
g_pool[i] = 0;
g_allocSize[i] = 0;
}
}
int MemPoolRequest(int memSize)
{
int i;
int cnt = 0;
int ret = TOTAL_MEM;
if (memSize == 0) {
return -1;
}
for (i = 0; i < TOTAL_MEM; i++) {
if (g_pool[i] == 0) {
cnt++;
if (cnt >= memSize) {
ret = i - memSize + 1;
break;
} else {
cnt = 0;
}
}
}
if (ret == TOTAL_MEM) {
return -1;
}
for (i = ret; i < ret + memSize; i++) {
g_pool[i] = 1;
}
g_allocSize[ret] = memSize;
return ret;
}
int MemPoolRelease(int startAddr)
{
int i = 0;
if ((startAddr > TOTAL_MEM - 1) || g_allocSize[startAddr] == 0) {
return -1;
}
for (i = startAddr; i < startAddr + g_allocSize[startAddr]; i++) {
g_pool[i] = 0;
}
g_allocSize[startAddr] = 0;
return 0;
}
int main(int argc, char *argv[])
{
int n = 0;
static char buf[BUF_LEN] = {0};
int i = 0;
int info;
int ret;
if (scanf("%d\n", &n) != 1) {
return -1;
}
MemPoolInit();
for (i = 0; i < n; i++) {
if (NULL == gets(buf)) {
return -1;
}
info = atoi(buf + 8);
if (buf[2] == 'Q') {
ret = MemPoolRequest(info);
if (ret != -1) {
(void)printf("%d\n", ret);
} else {
(void)printf("error\n");
}
} else if (buf[2] == 'L') {
ret = MemPoolRelease(info);
if (ret != 0) {
(void)printf("error\n");
}
}
}
return 0;
}
```
习题1暴露出来的问题 -- :
1.没有最优解的概念,一上来还是沿用自己的思路在解题
2.导致也花费了不少的时间
-- 其实自己已经给出了较为优解的方案,也AC通过了,只是不自信。
习题2暴露出来的问题 -- 矩形面积:
1.没有思路,疯狂乱怼
2.耗费大量时间
-- 此题,思路相近,为什么没有做出来,需要进一步分析清楚。
```
#include <stdio.h>
#include <math.h>
#define MAXN 100000
int g_high = 0;
unsigned int GetMinArea(int **opers, int curCnt)
{
unsigned int curArea = 0;
if (curCnt == 0) {
return 0;
}
g_high = g_high + opers[curCnt - 1][1];
curArea = (opers[curCnt][0] - opers[curCnt - 1][0]) * abs(g_high);
return curArea;
}
int main(int argc, char *argv[])
{
int n = 0;
int stopPoint = 0;
static int buf[MAXN][2] = {0};
static int *opers[MAXN];
int i;
unsigned int ret = 0;
for (i = 0; i < MAXN; i++) {
opers[i] = NULL;
}
if (scanf("%d %d", &n, &stopPoint) == EOF) {
return -1;
}
for (i = 0; i < n; i++) {
if (scanf("%d %d", &buf[i][0], &buf[i][1]) == EOF) {
return -1;
}
opers[i] = buf[i];
ret += GetMinArea(opers, i); // 一次高度计算一次面积
}
// 计算剩余部分的面积
g_high = g_high + opers[i - 1][1];
ret += (stopPoint - opers[i - 1][0])*abs(g_high);
(void)printf("%u", ret);
return 0;
}
```
网友评论