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;
}
虽然还是很长。但是还是觉得自己的最好(暗笑)!