卡布列克圓舞曲

描述

卡布列克是一位數學家,他在研究數字時發現:任意一個不是用完全相同數字組成的四位數,如果對它們的每位數字重新排序,組成一個較大的數和一個較小的數,然後用較大數減去較小數,差不夠四位數時補零,類推下去,最後將變成一個固定的數: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

4321
54321

樣例輸出1

6174
82962 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;
}

 

發佈了46 篇原創文章 · 獲贊 2 · 訪問量 8069
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章