zoukankan      html  css  js  c++  java
  • 交换瓶子

    /*有N个瓶子,编号 1 ~ N,放在架子上。
    比如有5个瓶子:
    2 1 3 5 4
    要求每次拿起2个瓶子,交换它们的位置。
    经过若干次后,使得瓶子的序号为:
    1 2 3 4 5
    对于这么简单的情况,显然,至少需要交换2次就可以复位。
    如果瓶子更多呢?你可以通过编程来解决。
    输入格式为两行:
    第一行: 一个正整数N(N<10000), 表示瓶子的数目
    第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。
    输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。
    例如,输入:
    5
    3 1 2 5 4
    程序应该输出:
    3
    再例如,输入:
    5
    5 4 3 2 1
    程序应该输出:
    2
    资源约定:
    峰值内存消耗 < 256M
    CPU消耗  < 1000ms
    
    分析:遍历数组,如果当前位置的瓶子编号不对,就找到那个正确编号的瓶子交换过来,累加得到交换的次数*/
    package test;
    
    import java.util.Scanner;
    
    public class 交换瓶子 {
        static int[] a;
        public static void main(String arg[]){
            int count = 0;
            Scanner input=new Scanner(System.in);
            int n=input.nextInt();
            a=new int[n+1];
            for(int i=1;i<=n;i++)
                a[i]=input.nextInt();
            for(int i=1;i<=n;i++){
                if(a[i]!=i){//若当前位置的瓶子编号不对
                    for(int j=1;j<=n;j++){
                        if(i!=j){
                        if(a[i]==j){//找到瓶子的正确编号并交换
                            swap(i,j);
                            count++;
                            }}
                    }
                }
            }
            System.out.print(count);
        }
    
        private static void swap(int i, int j) {
            // TODO Auto-generated method stub
            int temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    
    }
  • 相关阅读:
    调试PHP如何让浏览器提示错误
    接口的理解
    linux中的curl
    linux后台执行命令:&和nohup
    php定界符<<<EOF讲解
    有关字符集问题
    设置disabled属性
    PHP魔术常量
    phpstorm-有关设置
    php常用函数
  • 原文地址:https://www.cnblogs.com/ljs-666/p/8570124.html
Copyright © 2011-2022 走看看