这个实现起来不难,我就不说了,记录下我在其中遇到的坑,就是我调用了rewind(stdin)这个函数来清空输入缓冲区,结果在线OJ老是给我报输出超限,让我找这个错误找了好久,找到我心都碎了........
这里为什么要清空输出缓冲区呢,就是因为在第一行输出完成之后还要键入一个Enter,进入下一行的输入,所以我写程序的时候用了rewind(stdin)这个函数,结果困扰了许久。
话说回来,以后想清空输入缓冲区的话,还是老老实实的用下面两行代码吧:
scanf("%*[^\n]"); //忽略所有不是'\n'的字符
scanf("%*c"); //忽略一个字符(包括'\n'), 因为上行中并没有将'\n'干掉。
将rewind(stdin)换成上述两行代码结果就好了。(话说我直接注释掉那个rewind(stdin)居然也可以!!!!!)
下面是我正确的代码:
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int main()
{
int a[100];
int b[100];
int m;
int n;
while (scanf("%d", &m)!=EOF) {
if (m == 0)break;
for (int i = 0; i < m; i++) {
scanf("%d", &a[i]);
}
scanf("%*[^\n]");
scanf("%*c");
scanf("%d", &n);
for (int j = 0; j < n; j++) {
scanf("%d", &b[j]);
}
int i = 0;
int j = 0;
int *t = new int[m + n];
int size = 0;
while (i < m&&j < n) {
if (a[i] > b[j]) {
t[size++] = b[j];
j++;
}
else {
t[size++] = a[i];
i++;
}
}
while (i < m) {
t[size++] = a[i];
i++;
}
while (j < n) {
t[size++] = b[j];
j++;
}
for (int i = 0; i < size; i++) {
if (i == 0) {
printf("%d", t[i]);
}
else {
printf(" %d", t[i]);
}
}
printf("\n");
//
for (int i = 0; i < 100; i++) {
a[i] = b[i] = 0;
}
delete t;
}
//getchar();
return 0;
}
结果如下:
下面是我找这个坑的见证:
路漫漫其修远兮,吾将上下而求索!