糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 卡布列克圆舞曲

卡布列克圆舞曲

时间:2019-07-29 11:32:29

相关推荐

卡布列克圆舞曲

描述

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

例如:4321-1234=3087

8730-378=8352

8532-2358=6174

7641-1467=6174

如果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

样例输入1

432154321

样例输出1

617482962 75933 63954 61974

限制

各个测试点1s

来源

Xiaomengxian

高一的第二次考试题

#include<iostream>

#include<string.h>

#include<cstring>

#include<cstdio>

using namespace std;

double number, circle[1000];

int check_print(int i)

{

int j;

for (j=0; j<i; j++)

{

if (circle[j]==circle[i])

{

break;

}

}

if (j==i) return 0;

else

{

for (; j<i; j++)

{

printf("%.0lf ", circle[j]);

}

printf("\n");

return 1;

}

}

double pow1(int n)

{

if (n==0) return 1;

else return pow1(n-1)*10;

}

double confuse(double number)

{

char ch[150];

int temp;

double max=0, min=0;

sprintf(ch, "%.0f", number);

int i,j;

for (i=0; i<strlen(ch); i++)

{

for (j=0; j<strlen(ch)-i-1; j++)

{

if (ch[j]>ch[j+1])

{

temp=ch[j];

ch[j]=ch[j+1];

ch[j+1]=temp;

}

}

}

for (i=0; i<strlen(ch); i++)

{

max+=pow1(i)*(ch[i]-'0');

min+=pow1(strlen(ch)-i-1)*(ch[i]-'0');

}

return max-min;

}

void femain(double number)

{

int i=0;

for (i=0;; i++)

{

circle[i]=number;

if (check_print(i)==1) break;

else

{

number=confuse(number);

}

}

}

int main()

{

while(1)

{

if (scanf("%lf", &number)==-1) break;

else

{

femain(number);

}

}

return 0;

}

如果觉得《卡布列克圆舞曲》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。