编程考试总结

2020-05-22  本文已影响0人  望望明月

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;

}

```

上一篇下一篇

猜你喜欢

热点阅读