/*五、分析以下需求,并用代码实现: (1)打印由7,8,9三个数组成的三位数,要求该三位数中任意两位数字不能相同; (2)打印格式最后的三位数字以空格分隔,如789 798 879 897 978 987。 注:要求使用StringBuilder来完成*/public class HomeWork05 { public static void main(String[] args) throws IOException {// 输入值并简单处理 Scanner sc = new Scanner(System.in); System.out.println("请输入起始值(0~9):"); int start=sc.nextInt(); System.out.println("请输入结束值(0~9):"); int end=sc.nextInt(); int bound=end-start+1; StringBuilder stringBuilder = new StringBuilder(); HashSet<String> set = new HashSet<>(); int cout=0; Random r = new Random(); long bCount=boundCount(bound); if (bCount>10000){ System.out.println("结果数超过10000为"+bCount+"计算会很慢,请按任意键继续"); System.in.read(); }// 穷举各种可能,小于正确结果个数持续执行 直到达到正确个数 while (set.size()<bCount) { int number = r.nextInt(bound) + start; if (!stringBuilder.toString().contains(String.valueOf(number))&&stringBuilder.toString().length()<bound){ stringBuilder.append(number); }else if (stringBuilder.toString().length()==bound){ set.add(stringBuilder.toString()); stringBuilder=new StringBuilder(); } } List ts = new ArrayList<>(set); Collections.sort(ts); //排序 System.out.println("结果数:"+ts.size()); System.out.println(ts.toString().replace("[","") .replace("]","") .replace(","," ")); } /** * 计算笛卡尔积运算去重后个数 * @param bound * @return */ public static long boundCount(int bound){ int sum=1; for (int i = 1; i <= bound; i++) { sum*=i; } return sum; }}