蓝桥杯: P0602数字排列&&整数循环

蓝桥杯: P0602数字排列

编写一个程序,输入一个4位的自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后用最大数减去最小数,得到一个新的自然数,把这个数打印出来。然后对于这个新的自然数,重复上述步骤,直到该自然数的值不再发生变化。例如,假设用户输入的自然数为1001,那么由它所形成的最大数为1100,最小数为11,因此新的自然数为1089。对于1089,由它形成的最大数为9810,最小数为189,因此新的自然数为9621。9621的最大数为9621,最小数为1269,结果为8352,。8352的最大数为8532,最小数为2358,结果为6174。6174的最大数为7641,最小数为1467,结果仍为6174,因此程序结束。
输入:
  1001
输出:
  6174

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int []ints=new int[4];
        int input1=input.nextInt();
        ints[0]=input1/1000;
        ints[1]=input1%1000/100;
        ints[2]=input1%1000%100/10;
        ints[3]=input1%1000%100%10;
        combine(ints);
    }
    public static void combine(int []ints){
        Integer result=ascSort(ints)-descSort(ints);//第一次结果
        int []num=new int[4];
        StringBuffer stringBuffer=new StringBuffer();
        int i=0;
        while (true){
            stringBuffer.append(result);//存储结果
            stringBuffer.append(" ");//添加空格,方便切割成数组
            //分解成个,十,百,千,方便排序
            num[0]=result/1000;
            num[1]=result%1000/100;
            num[2]=result%1000%100/10;
            num[3]=result%1000%100%10;
            result=ascSort(num)-descSort(num);
            String[]s=stringBuffer.toString().split(" ");//切割成数组 
            //数组只有一个的时候不触发该循环体的if循环
            for (int j=0 ;j<s.length;j++){
                //和前一个相比,相同输出
                if (j>=1&&s[i].equals(s[j-1])){//j>=1 使第一次不参与比较,防止数组越界 
                    System.out.println(s[i]);//取第i个
                    return;
                }
            }
            i++;
        }
    }
    //降序排序
    public static Integer ascSort(int []ints){
        for (int i=0;i<ints.length-1;i++){
           for (int j=0;j<ints.length-i-1;j++){
               if (ints[j]<ints[j+1]){
                   int tem =ints[j];
                   ints[j]=ints[j+1];
                   ints[j+1]=tem;
                }
           }
        }
        Integer max= Integer.parseInt(outPut(ints).toString());
        return max;
    }
    //升序排序
    public  static Integer descSort(int [] ints){
        for (int i=0;i<ints.length-1;i++){
            for (int j=0;j<ints.length-i-1;j++){
                if (ints[j]>ints[j+1]){
                    int tem =ints[j];
                    ints[j]=ints[j+1];
                    ints[j+1]=tem;
                }
            }
        }
        Integer min=Integer.parseInt(outPut(ints).toString());
        return min;
    }
    //输出
    public static StringBuffer outPut(int [] ints){
        StringBuffer stringBuffer=new StringBuffer();
        for (int a:ints){
            stringBuffer.append(a);       
        }
        return stringBuffer;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只代码小白啦啦啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值