【算法】1089:有序合并

这个实现起来不难,我就不说了,记录下我在其中遇到的坑,就是我调用了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;
}

结果如下:

下面是我找这个坑的见证:

路漫漫其修远兮,吾将上下而求索!

猜你喜欢

转载自blog.csdn.net/CholenMine/article/details/83114498