卡布列克是一位数学家,他在研究数字时发现:任意一个不是用相同数字组成的四位数或三位数,如果对它们的每位数字重新排序,然后组成一个最大的数和一个最小的数,用大数减去小数,差不够原来的位数时补零,类推下去,最后将变成一个固定的数,四位数是6174,三位数是:495,这就是卡布列克常数。 如果五位数,而是在几个数字之间形成循环,称作卡布列克圆舞曲。如:
54321-12345=41976 43211-11234=31977
97641-14679=82962 97731-13779=83952
98622-22689=75933 98532-23598=74943
97533-33579=63954 97443-34479=62964
96543-34569=61974 96642-24669=71973
97641-14679=82962 97731-13779=83952
编程模拟五位数的卡布列克圆舞曲求解过程。
#include<iostream>
using namespace std;
typedef int arr[10];
arr z[100000],t1,t2;
char ch;
int start,skip;
bool ok(int s){
for(int i=1;i<=5;i++)
if(____(1)____) return false;
return true;
}
void print(int s){
cout<<s<<endl;
for(int i=s;i<skip;i++){
for(int j=1;j<=5;j++) cout<<z[i][j];
cout<<endl;
}
}
int main(){
for(int i=1;i<=5;i++){
cin>>ch;z[1][i]=ch-’0’;
}
skip=1;
do{
for(int i=0;i<10;i++){
t1[i]=z[skip][i];
t2[i]=t1[i];
}
for(int i=1;i<=5;i++)
for(int j=i+1;j<=5;j++)
if(t1[i]<t1[j]){
int t=t1[i];t1[i]=t1[j];t1[j]=t;
}
for(int i=1;i<=5;i++)
for(int j=i+1;j<=5;j++)
if(__(2)___){
int t=t2[i];t2[i]=t2[j];t2 [j]=t;
}
for(int i=1;i<=5;i++) t1[i]=t1[i]-t2[i];
for(int i=5;i>=1;i- -)
if(t1[i]<0){
t1[i-1]- -; t1[i]+=10;
}
skip++;
for(int i=0;i<10;i++) ___(3)____;
for(int i=1;i<skip;i++) if(____(4)____){
print(i); return 0;
}
}while(1);
return 0;
}