kukucall 2018-03-18 08:03 采纳率: 0%
浏览 930
已结题

卡布列克圆舞曲JAVA代码优化

import java.util.*;
public class Main {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    ArrayList<String> str = new ArrayList<String>();
    Select select = new Select();
    int i;
    String sub;
    while(input.hasNext()) {
        str.clear();
        sub = input.next();
        str.add(sub);
        i = 1;
        if(sub.equals("0")) {
            System.out.println("0");
            continue;
        }
        while(true) {
            str.add(Select.sort(sub));
            String strR = new StringBuffer(Select.sort(sub)).reverse().toString();
            sub = String.valueOf(Math.abs(Long.parseLong(str.get(i)) - Long.parseLong(strR)));
            if(!str.contains(String.valueOf(sub))) {
                str.remove(i);
                str.add(String.valueOf(sub));
                sub = Select.sort(sub);
                i++;
            }else {
                int j = str.indexOf(String.valueOf(sub));
                if(i==j+1) {
                    System.out.println(str.get(j));
                    break;
                }
                else {
                    for(; j<str.size()-2; j++) {
                        System.out.print(str.get(j) + " ");
                    }
                    System.out.println(str.get(str.size()-2));
                    break;
                }
            }
        }
    }
}

}

class Select{
public static String sort(String str){
char[] s1 = str.toCharArray();
for(int i=0;i<s1.length;i++){
for(int j=0;j<i;j++){
if(s1[i]<s1[j]){
char temp = s1[i];
s1[i] = s1[j];
s1[j] = temp;
}
}
}
String st = new String(s1);
return st;
}
}

要求输出格式不变
学校OJ拜托大佬了
题目描述
  卡布列克是一位数学家,他在研究数字时发现:任意一个不是用完全相同数字组成的四位数,如果对它们的每位数字重新排序,组成一个较大的数和一个较小的数,然后用较大数减去较小数,差不够四位数时补零,类推下去,最后将变成一个固定的数:6174,这就是卡布列克常数。

  例如:4321-1234=3087

     8730-378=8352

     8532-2358=6174

     7641-1467=6147

  如果K位数也照此办理,它们不是变成一个数,而是在几个数字之间形成循环,称作卡布列克圆舞曲。例如对于五位数54321:

  54321-12345=41976

  97641-14679=82962

  98622-22689=75933

  97533-33579=63954

  96543-34569=61974

  97641-14679=82962

  我们把82962 75933 63954 61974称作循环节,即卡布列克圆舞曲。

输入数据
文件包含若干行,每行为一个待求“卡布列克圆舞曲”的起始整数(小于maxlongint)
输出数据
每行为对应整数的循环节,数据之间用空格隔开。


  • 写回答

1条回答

  • threenewbee 2018-03-18 16:13
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)