问题 3797 --卡布列克圆舞曲(完善程序)

3797: 卡布列克圆舞曲(完善程序)★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 40  解决: 35
[提交][状态][命题人:]

题目描述

卡布列克是一位数学家,他在研究数字时发现:任意一个不是用相同数字组成的四位数或三位数,如果对它们的每位数字重新排序,然后组成一个最大的数和一个最小的数,用大数减去小数,差不够原来的位数时补零,类推下去,最后将变成一个固定的数,四位数是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;
}

输入

一个五位正整数

输出

第一行为k, 表示从第k个数之后形成循环

接下来为循环出现的数字,每个一行

样例输入
Copy
12543
样例输出
Copy
3
82962
75933
63954
61974

提示

来源

[提交][状态]