欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

给定两个整数 A 和 B,返回任意字符串 S

程序员文章站 2022-04-16 16:02:19
给定两个整数 A 和 B,返回任意字符串 S,要求满足:(1)S 的长度为 A + B,且正好包含 A 个 'a' 字母与 B 个 'b' 字母;(2)子串 'aaa' 没有出现在 S 中;(3)子串 'bbb' 没有出现在 S 中。(1)S 的长度为 A + B,且正好包含 A 个 ‘a’ 字母与 B 个 ‘b’ 字母;(2)子串 ‘aaa’ 没有出现在 S 中;(3)子串 ‘bbb’ 没有出现在 S 中。)import java.util.Random;import java.uti...

给定两个整数 A 和 B,返回任意字符串 S,要求满足: (1)S 的长度为 A + B,且正好包含 A 个 'a' 字母与 B 个 'b' 字母; (2)子串 'aaa' 没有出现在 S 中; (3)子串 'bbb' 没有出现在 S 中。


(1)S 的长度为 A + B,且正好包含 A 个 ‘a’ 字母与 B 个 ‘b’ 字母;
(2)子串 ‘aaa’ 没有出现在 S 中;
(3)子串 ‘bbb’ 没有出现在 S 中。
)

import java.util.Random;
import java.util.Scanner;
import java.util.TreeSet;

public class Test1 {
    public static void main(String[] args) {
        int A, B;  //输入的A,B的值
        boolean b = true; //用于判断是否符合条件
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入A的值:");
        A = sc.nextInt();
        System.out.print("请输入B的值:");
        B = sc.nextInt();
        int sum = A + B;
        char[] chars = new char[sum];  //用于拼接的字符数组
        int[] ch = new int[sum]; //用于保存字符顺序
        int[] ch2 = new int[A]; //用于保存字符‘a’顺序
        int[] ch3 = new int[B]; //用于保存字符‘b’顺序
        Random r = new Random(0);
        while (b){
            b=false;
            for (int i = 0; i < sum; i++) {
                ch[i] = r.nextInt(sum);
                for (int z = 0; z < i; z++) {
                    if (ch[i] == ch[z]) {
                        i--;
                        break;
                    }
                }
                if (i < A) {
                    ch2[i] = ch[i];
                } else {
                    ch3[i - A] = ch[i];
                }
            }
            ch2=SetArr(ch2,A);
            ch3=SetArr(ch3,B);

            //判断‘a’字符是否符合条件
            for (int i=0;i<A-2;i++){
                if(ch2[i+2]-ch2[i+1]==1&&ch2[i+1]-ch2[i]==1){
                    b=true;
                    break;
                }
            }

            //判断‘b’字符是否符合条件
            for (int i=0;i<B-2;i++){
                if(ch3[i+2]-ch3[i+1]==1&&ch3[i+1]-ch3[i]==1){
                    b=true;
                    break;
                }
            }
        }
        //拼接符合条件的字符
        for (int i = 0; i < sum; i++) {
            if (i < A) {
                chars[ch[i]] = 'a';
            } else {
                chars[ch[i]] = 'b';
            }
        }

        //将拼接好的字符数组转换为字符串
        String s = String.valueOf(chars);
        System.out.println(s);
    }


    //排序
    public static int[] SetArr(int[] arr, int n) {
        TreeSet set = new TreeSet<String>();
        for (int i = 0; i < n; i++) {
            set.add(arr[i]);
        }
        Object[] ar = set.toArray();
        for (int j = 0; j < ar.length; j++) {
            arr[j] = (int) ar[j];
        }
        return arr;
    }
}

本文地址:https://blog.csdn.net/study_slacker_/article/details/110479069

相关标签: java

推荐阅读