交换两个整型

题目描述

输入

输入待交换的两个整型数字,以空格分隔

输出

输出交换后的两个整型数字,以空格分隔

样例输入

1 2

样例输出

2 1

代码实现

package momo;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Integer a = sc.nextInt();
        Integer b = sc.nextInt();
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        System.out.println(a + " " + b);
    }
}

字符串排列

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

输入

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

输出

对应每组数据,按字典序输出所有排列。

样例输入

abc

样例输出

abc
acb
bac
bca
cab
cba

代码实现

package momo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        ArrayList<String> list = Permutation(str);
        for (String s :
                list) {
            System.out.println(s);
        }
    }

    public static ArrayList<String> Permutation(String str) {
        ArrayList<String> list = new ArrayList<>();
        char[] ch = str.toCharArray();
        Permu(ch, 0, list);
        Collections.sort(list);
        return list;
    }

    public static void Permu(char[] str, int i, ArrayList<String> list) {
        if (str == null) {
            return;
        }
        if (i == str.length - 1) {
            if (list.contains(String.valueOf(str))) {
                return;
            }
            list.add(String.valueOf(str));
        } else {
            for (int j = i; j < str.length; j++) {
                char temp = str[j];
                str[j] = str[i];
                str[i] = temp;
                Permu(str, i + 1, list);
                temp = str[j];
                str[j] = str[i];
                str[i] = temp;
            }
        }
    }
}

最大乘积

题目描述

有长度为n的整数数组,从这 n 个整数中按照顺序选取m个,要求相邻两个整数在原数组中的位置相差不超过i,使得这 m 个整数的乘积最大,请返回最大乘积。
输入

第一行 整数n (1<n<20)
第二行 按顺序的n个整数   整数的范围在-50 到 50之间 
第三行 整数i和m  (1<i<20, 1<m<50)

输出

返回乘积

样例输入

3
7 4 7 
2 50

样例输出

49

代码实现

package momo;

import java.util.Scanner;

public class Main3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        int k = sc.nextInt();
        int m = sc.nextInt();
        long[][] maxProduct = new long[n][k];
        long[][] minProduct = new long[n][k];
        for (int i = 0; i < n; i++) {
            maxProduct[i][0] = arr[i];
            minProduct[i][0] = arr[i];
        }
        long max = Long.MIN_VALUE;
        for (int i = 0; i < n; i++) {
            for (int j = 1; j < k; j++) {
                for (int p = i - 1; p >= Math.max(i - m, 0); p--) {
                    maxProduct[i][j] = Math.max(maxProduct[i][j],
                            maxProduct[p][j - 1] * arr[i]);
                    maxProduct[i][j] = Math.max(maxProduct[i][j],
                            minProduct[p][j - 1] * arr[i]);
                    minProduct[i][j] = Math.min(minProduct[i][j],
                            minProduct[p][j - 1] * arr[i]);
                    minProduct[i][j] = Math.min(minProduct[i][j],
                            maxProduct[p][j - 1] * arr[i]);
                }
            }
            max = Math.max(max, maxProduct[i][k - 1]);
        }
        System.out.println(max);
    }
}