lunaArcher
2016-10-09 14:27
采纳率: 100%
浏览 2.4k
已采纳

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;
}


  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 祈祷爱绝缘 2016-10-10 08:28
    已采纳

    在网上搜了一下,找到一个和你同样的问题的:
    http://blog.csdn.net/acm_mercyking/article/details/49914779

    他说:如果有多个最小值要用最后面的一个和第一个数进行交换。

    估计就是因为这个问题,这个应该算是题目没有说清楚。

    已采纳该答案
    打赏 评论
  • threenewbee 2016-10-09 14:34

    你看下你oj平台的要求,你这个是输入一行输出一行,可能要求是输入全部再输出全部。

    打赏 评论
  • 孤鸿子_ 2016-10-09 14:50
    while (Lu[i] <= Lu[x])
                    ++x;
    
    

    数组可能越界吧,试试数据
    2 1 2

    打赏 评论
  • 祈祷爱绝缘 2016-10-10 08:21

    你的思路好神奇。。我看了好长时间才看懂。。一般人的思路应该都是用一个变量存当前最小值的下标,然后遍历一遍数组吧。。

    我猜有没有可能是因为有多个相等最小值的问题?你的方法是把找到的第一个最小值和第一个数交换了,要不试试把最后一个最小值和第一个交换试试?

    友情建议:if和while的后面就算只有一句也都写上大括号,要不然会被坑死的。。

    打赏 评论

相关推荐 更多相似问题