在解决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
我总是得到错误的答案,我不知道为什么。