hdu 2019 数列有序! 一直wrong answer 可我真的找不到算法哪里错了。。

数列有序!
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 57349 Accepted Submission(s): 24714

Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。

Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。

Output
对于每个测试实例,输出插入新的元素后的数列。

Sample Input
3 3
1 2 4
0 0

Sample Output
1 2 3 4

#include <stdio.h>
int main()
{
int n, m, i, j, temp = 0, a[101];
while (scanf("%d %d", &n, &m) && n)
{
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if (m < a[i]) temp = i;
}
for (j = n-1; j >= temp; j--)
{
a[j+1] = a[j];
}
a[temp] = m;
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("%d\n", a[n]);
}
return 0;
}

你这代码我随便测试几组数据结果都是错的,你是只测了样例就觉得没问题了吧?
1、输入的是已经按从小到大排好的了,if (m < a[i]) temp = i;,如果序列中某个a[i]大于m,那之后的a[i]更是必然大于m的了,所以序列中只要存在大于m的数,你的temp就肯定等于n-1。
2、对于每组数据,你的temp没有初始化,如果序列中不存在大于m的数,也就是m要放在序列的最后,但是这种情况下你的temp不会在第一个for循环中赋值,那么第一组数据时temp是0,而后面的数据temp是上一组计算的值,这肯定是错的。
3、题目中明明说的是“n和m同时为0标示输入数据的结束”,你怎么只判断了n为0就结束了?追问

呃 针对3 我想问一下我可以这么写吗while(scanf("%d %d", &m, &n) != EOF && n && m)
但是如果数据输入时候n、m其中一个为零而另一个不为零 都会退出循环 怎样才能避免?

追答

既然结束条件是n和m同时为0,那么是不是文件结尾就没必要判断了,而且n和m同时为0,判断结果为false,这明显是或的关系啊。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网