(翻转排序)输入法相同,但ideone和代码块中的输出不同

时间:2018-07-22 17:21:36

标签: c sorting codeblocks

在解决uVa中的问题时我遇到了这个问题。问题的名称是“ 10327-翻转排序”

问题陈述是...


`计算机科学中的排序是重要的部分。几乎每个问题都可以有效解决 找到排序的数据。有一些优秀的排序算法已经实现了较低的 界在这个问题中,我们还将讨论一种新的排序方法。用这种方法 只有一个操作(翻转)可用,也就是说您可以交换两个相邻项。如果您认为 同时,您将看到总是可以用这种方式对一组数字进行排序。 将给出一组整数。现在,使用上述方法,我们要对数字进行排序 升序。您必须找出所需的最小翻转次数。例如对“ 1 2 3”进行排序 我们不需要翻转操作是否可以对“ 2 3 1”进行排序,我们至少需要2次翻转操作。

输入

输入将以正整数N(N≤1000)开头。在接下来的几行中,将有N个整数。 输入将被EOF终止。

输出

对于每个数据集,打印“最小交换操作:M”,其中M是执行排序所需的最小翻转操作。对于每种情况,请使用单独的一行。

样本输入

3

1 2 3

3

2 3 1

样本输出

最小交换操作:0

最少的交换操作:2


这很简单。 这是我的代码。

#include <stdio.h>
#include <stdlib.h>

int main()
{
int i,j,n,a[1001],temp,c;

while(scanf("%d",&n)!=EOF)
{
    c=0;
    for(i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    i=0;
    while(i<n)
    {
        j=0;
        while(j<n)
        {
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
                c++;
            }
            j++;
        }
        i++;
    }
    printf("Minimum exchange operations : %d\n",c);
}

return 0;
}

针对以下以下测试案例:

5

6 2 1 5 4

8

3 5 8 2 1 9 7 0

2

0 0

12

0 1 2 5 4 1 2 0 5 0 7 9

50

21 5 6 5 8 452 12 5 96 21 21 5 6 5 8 452 12 5 96 21 21 5 6 5 8 452 12 5 96 21 21 5 6 5 8 452 12 5 96 21 21 5 6 5 8 452 12 5 96 21

可接受的输出是

最少交换操作:6

最少交换操作:16

最小交换操作:0

最少交换操作:19

最少交换操作:485


我进入了代码块。但是ideone一直显示这些输出->

最少交换操作:11

最少交换操作:23

最小交换操作:0

最少交换操作:28次

最少交换操作:535


我总是得到错误的答案,我不知道为什么。

0 个答案:

没有答案