特殊交换(蘑菇街笔试题)

来源:互联网 发布:网络教育本科费用 编辑:程序博客网 时间:2024/04/30 23:49

题目:现有一个n个整数的序列,你要做的就是交换两个数的位置直到整个序列按照升序排列,那么将这个整数序列排好序,需要交换多少次?例如,1,2,3,5,4,我们只需要交换一次,即将5和4交换即可。

输入描述:
第一行输入一个正整数n(n≤1000),表示数字序列的元素个数,占一行;接下来一行输入从1到n的n个整数排序,中间用空格隔开

输出描述:
输出序列升序排列需要的最少交换次数

输入例子:
4
4 3 2 1

输出例子:
6

#include <iostream>using namespace std;int main(){        int arr[1000];        int num=0;        int n;        cin>>n;        cout<<endl;        for(int i=0;i<n;i++)        {                int p;                cin>>p;                arr[i]=p;        }        for(int i=0;i<n;i++)        {            for(int j=0;j<n-1;j++)            {            if(arr[j+1]<arr[j])            {                int tmp;                tmp=arr[j];                arr[j]=arr[j+1];                arr[j+1]=tmp;                num=num+1;            }            }        }           /*for(int i=0;i<n;i++)        {            cout<<arr[i]<<" ";        }*/        cout<<endl;        cout<<num<<endl;        return 0;}
public static void main(String[] args) {                int arr[]=new int[1000];                int num=0;                Scanner scan=new Scanner(System.in);                int n=scan.nextInt();                System.out.println();                for(int i=0;i<n;i++)                {                        int p=scan.nextInt();                        arr[i]=p;                }                for(int i=0;i<n;i++)                {                    for(int j=0;j<n-1;j++)                    {                    if(arr[j+1]<arr[j])                    {                        int tmp;                        tmp=arr[j];                        arr[j]=arr[j+1];                        arr[j+1]=tmp;                        num=num+1;                    }                    }                }                   System.out.println(num);                }