HDU2019                                   http://acm.hdu.edu.cn/showproblem.php?pid=2019

本来感觉天衣无缝,结果多打了个等号,赋值变成了判断。询问了下大佬,告诉了我这个神奇的debug

贴个代码

#include<stdio.h>
int main()
{
	int n, m;
	while(scanf("%d %d", &n, &m) != EOF){
		if(n == 0 && m == 0)
			break;
		
		int i, j, flag, a[200], b[200];
		
		for(i = 0; i < n; i++)
			scanf("%d", &a[i]);
			
		if(m > a[i-1])
			flag = 1;
		else if(m < a[0])
			flag = -1;
		else
			flag = 0;
						
		if(flag == 0){
			for(i = 0; i < n-1; i++){
				if((m >= a[i] && m < a[i+1]) || (m > a[i] && m <= a[i+1])){
					b[i] = a[i];
					b[i+1] = m;
					break;
				}
				else
					b[i] == a[i];
			}
		
			for(j = i+2; j < n+1; j++)
				b[j] = a[j-1];
		}
		else if(flag == 1){
			for(i = 0; i < n; i++)
				b[i] = a[i];
			a[n] = m;
		}
		else{
			b[0] = m;
			for(i = 0; i < n; i++)
				b[i+1] = a[i];
		}
		
		printf("%d", b[0]);
		for(i = 1; i < n+1; i++)
			printf(" %d", b[i]);
		printf("\n");
	}
	
	return 0;
}

就是那个位置,你看到了没!

多打了个等号。。

然后疯狂调试,不管怎样第一个值他总是一个所谓的系统默认值。

遗憾的是,直到问师兄之前我都没有发现这个小小的等号。

那时我一直以为并没有进else内,于是

直接就被扔了一句话:“万能得来说,用输出进行debug”,一脸懵逼,又被扔了一句“在else那写个输出,你就会发现...然后恍然大悟”。

于是,万恶的垃圾值又出现了,还是else后给它赋的。所以,就是这里!!!!

然后,然后它就成了。

之后我发现好像并不需要前面的m>a[i]判断。m第一次小于谁时把m插序进去即可。

于是

​
#include<stdio.h>
int main()
{
	int n, m;
	while(scanf("%d %d", &n, &m) != EOF){
		if(n == 0 && m == 0)
			break;
		
		int i, j, flag, a[200], b[200];
		
		for(i = 0; i < n; i++)
			scanf("%d", &a[i]);
			
		if(m > a[i-1])
			flag = 1;
		else if(m < a[0])
			flag = -1;
		else
			flag = 0;
						
		if(flag == 0){
			for(i = 0; i < n-1; i++){
				if(m < a[i+1]){
					b[i] = a[i];
					b[i+1] = m;
					break;
				}
				else
					b[i] = a[i];
			}
		
			for(j = i+2; j < n+1; j++)
				b[j] = a[j-1];
		}
		else if(flag == 1){
			for(i = 0; i < n; i++)
				b[i] = a[i];
			a[n] = m;
		}
		else{
			b[0] = m;
			for(i = 0; i < n; i++)
				b[i+1] = a[i];
		}
		
		printf("%d", b[0]);
		for(i = 1; i < n+1; i++)
			printf(" %d", b[i]);
		printf("\n");
	}
	
	return 0;
}

​

虽然还是很长。但是还是觉得自己的最好(暗笑)!