#515. 卡布列克圆舞曲

提交0 通过0
通过率0%
时间限制1000ms
内存限制256MiB
    ID: 515 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: 普及- 上传者: 标签>程序的基本概念字符串及其函数算法与描述编程题c++

题目描述

题目描述

卡布列克是一位数学家,他在研究数字时发现:任意一个不是用完全相同数字组成的四位数,如果对它的每位数字重新排序,组成最大的数和最小的数(位数不足时前导补零),用大数减小数,重复操作,最后一定会得到一个固定的数:6174,这就是卡布列克常数。

示例过程(输入 43214321):

43211234=30874321 - 1234 = 3087

87300378=83528730 - 0378 = 8352

85322358=61748532 - 2358 = 6174

76411467=61747641 - 1467 = 6174(之后恒为 61746174

对于任意 KK 位数做同样操作,往往不会收敛到固定值,而是会在若干个数字之间循环,这个循环就叫做卡布列克圆舞曲。

例如对 55 位数 5432154321 操作:

5432112345=4197654321 - 12345 = 41976

9764114679=8296297641 - 14679 = 82962

9862222689=7593398622 - 22689 = 75933

9753333579=6395497533 - 33579 = 63954

9654334569=6197496543 - 34569 = 61974

9764114679=8296297641 - 14679 = 82962(开始循环)

因此循环节为 82962 75933 63954 6197482962\ 75933\ 63954\ 61974,按顺序输出即可。

输入格式

第一行输入一个正整数 kk,表示数字的位数(保证 k18k \le 18)。

第二行输入一个 kk 位正整数 NN,即操作的起始数(保证 NN 的各位数字不全相同)。

输出格式

输出该起始数的卡布列克循环的完整循环节,循环内数字按出现顺序用空格分隔。如果收敛到固定值(循环节长度为 11),直接输出该值即可。

5
54321

82962 75933 63954 61974

数据规模与约定

对于 100%100\% 的数据:

1k181 \le k \le 18

输入的 NN 为合法的 kk 位正整数,各位数字不全相同 操作过程中所有中间值均为不超过 kk 位的非负整数,补前导零后进行排序

子任务 113030 分):k4k \le 4(保证收敛到 61746174

子任务 223030 分):k9k \le 9

子任务 334040 分):没有特殊限制