设为首页 加入收藏

TOP

数字黑洞(二)
2023-07-23 13:31:39 】 浏览:167
Tags:
所有5位数可能的循环圈。

(2)源程序。

#include<stdio.h>
int b[12]={0}, cnt=0; // 保存各循环圈中的数避免重复,cnt为黑洞中数的个数
int next(int n)       // 整数n各位数字组成的最大数与最小数的差
{
    int a[5],i,j;
    for (i=0;i<5;i++)
    {
        a[i]=n%10;
        n/=10;
    }
    for (i=0;i<4;i++)
        for (j=0;j<4-i;j++)
           if (a[j]>a[j+1])
           {
              int t;
              t=a[j]; a[j]=a[j+1]; a[j+1]=t;
           }
    int max=0,min=0;
    for (i=0;i<5;i++)
    {
        min=min*10+a[i];
        max=max*10+a[4-i];
    }
    return max-min;
}
void heidong(int n)
{
    int a[20],flag=0;
    a[0]=n;
    int i,j,k;
    for (i=1; ;i++)
    {
        a[i]=next(a[i-1]);
        for (j=0;j<i;j++)
        {
            if(a[i]==a[j])          // a[j]~a[i-1]之间的数构成循环圈
            {
                for (k=0;k<cnt;k++) // 看当前循环圈中的数是否保存过,本质是查重
                {
                    if(a[i]==b[k]) { flag=1; break;}
                }
                if (flag!=1)      // 输出循环圈中的各数,同时保存到全局数组b中
                {
                    printf("[%d",a[j]);
                    b[cnt++]=a[j];
                    for (k=j+1;k<i;k++)
                    {
                       printf(",%d",a[k]);
                       b[cnt++]=a[k];
                    }
                    printf("]\n");
                    flag=1;
                }
            }
        }
        if (flag==1) break;
    }
}
int main()
{
    int i;
    for(i=10000;i<99999;i++)
    {
       if (next(i)==0) continue;  // 各位数字全部相同,忽略
       heidong(i);
    }
    return 0;
}

        运行程序可知,所有5位数可能的循环圈有3个,如下。

[74943,62964,71973,83952]
[63954,61974,82962,75933]
[53955,59994]

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇OpenGL Windows 搭建环境(MFC版.. 下一篇C语言学习笔记---const关键字

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目