zoukankan      html  css  js  c++  java
  • 算法学习之冒泡排序,6174问题

    排序与检索
    数据处理是计算机的强项,包括排序、检索和统计等。
    6174问题
    假设你有一个各位数字互不相同的四位数,把所有数字从大到小排序后得到a,从小到大排序后得到b,然后a-b替换原来这个数,
    最终都会得到6174。
    例如,从1234出发,依次可以得到4321-1234=3087,8730-378=8352,8532-2358=6174。有趣的是,7641-1467=6174回到了它自己。
    输入一个n位数,输出操作序列,直到出现循环。
    样例输入:1234
    样例输出:1234->3087->8352->6174->6174
    分析:
    两个问题摆在我们面前:如何得到下一个数?
    如何检查这个数是否已经出现过?
    一一解决。
    “冒泡排序”

    #include <conio.h> 
    #include<stdio.h>
    #include<string.h>
    int get_next(int x){
        int a,b,n;
        char s[10];
        //转化成字符串
        sprintf(s,"%d",x); 
        n = strlen(s);
        //冒泡排序
        for(int i = 0;i<n;i++){
          for(int j = i+1;j<n;j++){
            if(s[i]>s[j]){//第i个跟之后的所有进行比较,最小的留下 
              char t = s[i];
              s[i] = s[j];
              s[j] = t;              
            }
          }
        }
        sscanf(s,"%d",&b); 
        //字符串反转
        for(int i=0;i<n/2;i++){
          char t = s[i];
          s[i] = s[n-1-i];
          s[n-1-i] = t;
        }  
        sscanf(s,"%d",&a);
        return a - b;
    }
    //逐个生成各个数
    int num[2000],count; 
    int main(){
        scanf("%d",&num[0]);
        printf("%d",num[0]);
        count = 1;
        for(;;){
          //生存并输出下一个数
          num[count] = get_next(num[count-1]);
          printf("->%d",num[count]);
          int found = 0;
          for(int i=0;i<count;i++){
            if(num[i] == num[count]){
              found = 1;break;
            }
          } 
          if(found){
            break;
          }
          count++;
        }
        printf("
    ");
        getch(); 
        return 0;
    }

     冒泡排序

    #include <conio.h> 
    #include<stdio.h>
    #include<string.h>
    int bubble_sort(int x){
        int r,n;
        char s[10];
        sprintf(s,"%d",x);
        n = strlen(s);
        for(int i=0;i<n;i++){
          for(int j=i+1;j<n;j++){
            if(s[i]>s[j]){
              int t = s[i];
              s[i] = s[j];
              s[j] = t;
            }
          }
        }
        sscanf(s,"%d",&r);
        return r;     
    }
    
    int main(){
        int num,r; 
        scanf("%d",&num);
        printf("%d",num);
        r = bubble_sort(num);
        printf("
    ");
        printf("排序后的结果为%d",r);
        getch(); 
        return 0;
    }
  • 相关阅读:
    SQL SERVER开窗函数
    SQL SERVER调优常用方法
    SQL SERVER其它函数
    SQL SERVER时间函数
    SQL SERVER字符串函数
    ptyhon技能树及其学习资源
    机器学习中的数学基础
    python-spider 第10题
    python-spider 第七关
    python-spider 第六关
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/3302225.html
Copyright © 2011-2022 走看看