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的后面就算只有一句也都写上大括号,要不然会被坑死的。。