ACM的水题。明明运行正确,但提交就是wrong answer呐,大佬求教
问题描述:
#include <iostream>
using namespace std;
int main()
{
int Lu[100];
int n, x = 0;
while (cin >> n && n < 100)
{
if (n == 0 || n < 0)
break;
for (int i = 0; i < n; i++)
cin >> Lu[i];
int key = Lu[0];
for (int i = 0; i < n; i++)
{
while (Lu[i] <= Lu[x])
++x;
if (x == n)
{
Lu[0] = Lu[i];
Lu[i] = key;
break;
}
}
for (int i = 0; i < n; i++)
cout << Lu[i] << ' ';
cout << endl;
x = 0;
}
return 0;
}
答
在网上搜了一下,找到一个和你同样的问题的:
http://blog.csdn.net/acm_mercyking/article/details/49914779
他说:如果有多个最小值要用最后面的一个和第一个数进行交换。
估计就是因为这个问题,这个应该算是题目没有说清楚。
答
你看下你oj平台的要求,你这个是输入一行输出一行,可能要求是输入全部再输出全部。
答
while (Lu[i] <= Lu[x])
++x;
数组可能越界吧,试试数据
2 1 2
答
你的思路好神奇。。我看了好长时间才看懂。。一般人的思路应该都是用一个变量存当前最小值的下标,然后遍历一遍数组吧。。
我猜有没有可能是因为有多个相等最小值的问题?你的方法是把找到的第一个最小值和第一个数交换了,要不试试把最后一个最小值和第一个交换试试?
友情建议:if和while的后面就算只有一句也都写上大括号,要不然会被坑死的。。