zoukankan      html  css  js  c++  java
  • 编写程序验证卡布列克运算

    #include <stdio.h>
    #include <math.h>
    
    #define N 4
    int GetMax( int a[]);
    int GetMin( int a[]);
    int check(int n);
    int idigit(int n,int a[]);
    void is_kabulek(int *n);
    int GetNum();
    
    
    int main() {
        int n;
        n=GetNum();
       is_kabulek(&n);
        return 0;
    }
    int GetMax( int a[]){
        int i,result=0;
        for (i = 0; i < N; i++) {
            result+=a[i]*pow(10,N-i-1);
        }
        return result;
    }
    int GetMin( int a[]){
        int i,result=0;
        for (i = 0; i < N; i++) {
            result+=a[i]*pow(10,i);
        }
        return result;
    }
    int check(int n){
        int arr[N],count=0;
        for(int i=0;i<N;i++){
            arr[i]=n%10;
            n/=10;
        }
        for(int i=0;i<N-1;i++){
            for(int j=i+1;j<N;j++){
                if(arr[i]==arr[j]){
                    count++;
                }
            }
        }
        if(count>3){
            return 0;
        }
            return 1;
    }
    int idigit(int n,int a[]){
        int i,j,t;
        for(i=0;i<N;i++){
            a[i]=n%10;
            n/=10;
        }
        for(i=0;i<N-1;i++){
            for(j=i+1;j<N;j++){
                if(a[i]<a[j]){
                    t=a[i];
                    a[i]=a[j];
                    a[j]=t;
                }
    
            }
        }
        return 0;
    
    }
    void is_kabulek(int *n){
        int a[N];
        idigit(*n,a);
        while(*n!=6174&&*n) {
            printf("%4d - %4d = %4d
    ",GetMax(a),GetMin(a),GetMax(a)-GetMin(a));
            *n = GetMax( a) - GetMin( a);
            idigit(*n,a);
        }
    }
    int GetNum() {
        int n;
        printf("input a four-digit number that is not the same as each digit
    ");
        while (1) {
            scanf("%d", &n);
            if (n > 999 && n < 10000 && check(n)) {
                break;
            } else {
                printf("illegal input,try again
    ");
                fflush(stdin);
            }
    
        }
        return n;
    }
    

      

    #include <stdio.h>
    #include <math.h>
    const int N=4;
    int GetMax( int n);
    int GetMin( int n);
    int check(int);
    int idigit(int n,int a[N]);
    
    
    int main() {
        int n;
        printf("input a four-digit number that is not the same as each digit
    ");
        while (1){
            scanf("%d",&n);
            if(n>999&&n<10000&&check(n)){
                break;
            }else{
                printf("illegal input,try again
    ");
                fflush(stdin);
            }
        }
        while(n!=6174&&n) {
        printf("%4d - %4d = %4d
    ",GetMax(n),GetMin(n),GetMax(n)-GetMin(n));
        n = GetMax(n) - GetMin(n);
        }
        return 0;
    }
    int GetMax( int n){
        int a[N],i,result=0;
        idigit(n,a);
        for (i = 0; i < N; i++) {
            result+=a[i]*pow(10,N-i-1);
        }
        return result;
    }
    int GetMin( int n){
        int a[N],i,j,t,result=0;
        idigit(n,a);
        for (i = 0; i < N; i++) {
            result+=a[i]*pow(10,i);
        }
        return result;
    }
    int check(int n){
        int arr[N],count=0;
        for(int i=0;i<N;i++){
            arr[i]=n%10;
            n/=10;
        }
        for(int i=0;i<N-1;i++){
            for(int j=i+1;j<N;j++){
                if(arr[i]==arr[j]){
                    count++;
                }
            }
        }
        if(count>3){
            return 0;
        }
            return 1;
    }
    int idigit(int n,int a[N]){
        int i,j,t;
        for(i=0;i<N;i++){
            a[i]=n%10;
            n/=10;
        }
        for(i=0;i<N-1;i++){
            for(j=i+1;j<N;j++){
                if(a[i]<a[j]){
                    t=a[i];
                    a[i]=a[j];
                    a[j]=t;
                }
    
            }
        }
        return 1;
    
    }
    

      

      

    编写程序验证卡布列克运算,任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:

    (1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;

    (2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);

    (3)求两个数的差,得到一个新的四位数(高位零保留)。

    重复以上过程,最后得到的结果是6174,这个数被称为卡布列克数。

    #include<stdio.h>
    
    int idigit(int n,int a[4])                 //取得四位数,并按照从大到小的顺序排列
    {
        int i=0,j,t;
        for(i=0;i<4;i++)
        {
            a[i] = n % 10;
            n = n / 10;
        }
        for(i=0;i<3;i++)                        //比较四个数(比三次),并从大到小依次存放
            for(j=i+1;j<4;j++)
                if(a[i]<a[j])
                {
                    t=a[i];
                    a[i]=a[j];
                    a[j]=t;
                }
        return 1;
    }
    
    int getmin(int n)                           //重新生成最小的四位数m
    {
        int a[4],i,j,t,m=0;                     //数组;两个循环变量;各位置值t;传递继承值m;
        idigit(n,a);
        for(i=3;i>=0;i--)                       //数组的最小情况(倒着)
        {
            t = 1;
            for(j=0;j<i;j++)                    //循环3+2+1+0=6次
                t *= 10;
            m += t * a[i];
        }
        return m;
    }
    
    int getmax(int n)                           //重新生成最大的四位数m
    {
        int a[4],i,j,t,m=0;
        idigit(n,a);
        for(i=0;i<4;i++)
        {
            t = 1;
            for(j=0;j<3-i;j++)
                t *= 10;
            m += t * a[i];
        }
        return m;
    }
    int check(int n){
        int arr[4];
        for(int i=0;i<4;i++){
            arr[i]=n%10;
            n/=10;
        }
        for(int i=0;i<3;i++){
            for(int j=i+1;j<4;j++){
                if(arr[i]==arr[j]){
                    return 0;
                }
            }
        }
        return 1;
    }
    int main()
    {
        int n;
        printf("Please enter a four digit number that is not the same as each digit:
    ");
        while (1){
            scanf("%d",&n);
            if(n>999&&n<10000&&check(n)){
                break;
            }else{
                printf("illegal input,try again
    ");
                fflush(stdin);
            }
        }    while(n!=6174)
        {
            printf("%4d - %4d = %4d
    ",getmax(n),getmin(n),getmax(n)-getmin(n));
            n = getmax(n) - getmin(n);
        }
        return 0;
    }
    

      

  • 相关阅读:
    如何不加班,以前问题的答案
    django部署
    djangocms安装技巧
    django_cms安装技巧
    sublime text 3插件
    昨日总结2016年1月11日
    django例子,question_text为中文时候报错
    关于django访问默认后台admin的时候提示403错误,
    laravel安装学习步骤
    关于composer安装插件时候提示找不到fxp插件时候的解决办法
  • 原文地址:https://www.cnblogs.com/jeseesmith/p/12744921.html
Copyright © 2011-2022 走看看