zoukankan      html  css  js  c++  java
  • 48.6174猜想

    1.题目描述

    6174猜想 ,1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数rev(m),得出数k1=m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去,卡普耶卡发现,无论k0是多大的四位数, 只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174

    2.题目分析

    首先是要将四位数转换为数组,重新排序后得到最大数max和最小数min,然后n=max-min,知道n=6174为止。需要注意的是n有可能小于1000,所以需要对max进行操作是它大于1000。

    3.解题思路

    ①四位数转数组②使用冒泡排序对数组重新排序③得到max与min并相减④判断是否等于6174

    4.C代码

     1 #include <stdio.h>
     2 int main(){
     3     int n,mi=0,ma=0,re=0,temp=0; //mi,ma分别代表最小最大值
     4     int a[4]; //申请一个长度为4的数组
     5     scanf("%d",&n); //输入n
     6     //循环执行,直到n=6174为止
     7     while(n!=6174){
     8      // 数字转数组,存放到a中
     9     for(int i=0;i<4;i++){ 
    10         a[i]=n%10;
    11         n=(n-a[i])/10;
    12         }
    13        //冒泡排序,从小到大排序
    14     for(int i=0;i<3;i++){
    15         for (int j=i+1;j<4;j++){
    16             if(a[j]<a[i]){
    17                 temp=a[i];
    18                 a[i]=a[j];
    19                 a[j]=temp;}
    20         }
    21     }
    22       //得到重新排序后的最大值最小值
    23     ma=a[0]+a[1]*10+a[2]*100+a[3]*1000;
    24     mi=a[0]*1000+a[1]*100+a[2]*10+a[3];
    25     while(ma<1000)ma*=10; //确保ma大于1000
    26     n=ma-mi; //得到n
    27     printf("%d-%d=%d
    ",ma,mi,n);//输出当前算式
    28     re+=1; //re记录算式的个数
    29     if (n==6174){
    30         break;
    31     }
    32        //得到6174后终止循环
    33     }
    34        //输出算式的总数
    35     printf("%d
    ",re);
    36     return 0;
    37 } 
  • 相关阅读:
    二分查找 java代码
    Failed at the bitcore-node@3.1.3 preinstall script './scripts/download' 设置linux proxy (代理)的方式
    github命令行实用操作
    H5无障碍旁白模式使用网页支持
    Vue框架搭建入门到熟悉
    解决IOS下返回不刷新的问题
    小程序—跳转 数据传递
    微信小程序——地图
    常用的正则判断
    JS 控制输入框输入表情emoji 显示在页面上
  • 原文地址:https://www.cnblogs.com/19991201xiao/p/8516959.html
Copyright © 2011-2022 走看看