• *1019. 数字黑洞


      1 /*
      2  * Main.c
      3  * 1019. 数字黑洞
      4  *  Created on: 2014年8月31日
      5  *      Author: Boomkeeper
      6  *******部分通过******
      7  */
      8 
      9 #include <stdio.h>
     10 #include <stdlib.h>
     11 
     12 /*
     13  *排序整数的各个位数字
     14  *src[4]:原数组
     15  *dstDown[4]:降序排序结果
     16  *dstUp[4]:升序排序结果
     17  */
     18 void sort(int dstUp[4],int dstDown[4],int src[4]){
     19 
     20     int i,j;
     21     int temp;
     22     //赋值
     23     for(i=0;i<4;i++){
     24         dstUp[i]=src[i];
     25         dstDown[i]=src[i];
     26     }
     27     //排序,up
     28     for(i=0;i<4;i++){
     29         for(j=0;j<4-i-1;j++){
     30             if(dstUp[j]>dstUp[j+1]){
     31                 temp=dstUp[j];
     32                 dstUp[j]=dstUp[j+1];
     33                 dstUp[j+1]=temp;
     34             }
     35         }
     36     }
     37     //排序,down
     38     for(i=0;i<4;i++){
     39         for(j=0;j<4-i-1;j++){
     40             if(dstDown[j]<dstDown[j+1]){
     41                 temp=dstDown[j];
     42                 dstDown[j]=dstDown[j+1];
     43                 dstDown[j+1]=temp;
     44             }
     45         }
     46     }
     47 }
     48 
     49 /*
     50  * 拆分整数的各位数字,以进行排序
     51  * 个位:num[3]
     52  * 十位:num[2]
     53  * 百位:num[1]
     54  * 千位:num[0]
     55  */
     56 void split(int n,int num[4]){
     57 
     58     num[3]=n%10;
     59     n/=10;
     60     num[2]=n%10;
     61     n/=10;
     62     num[1]=n%10;
     63     n/=10;
     64     num[0]=n;
     65 }
     66 
     67 /*
     68  * 获得排序后的新的4位整数,做差,并返回结果s
     69  */
     70 int Kaprebar(int temp){
     71 
     72     int num1[4]={0},num2[4]={0},num3[4];//分别存储被减数、减数、差的各位数字
     73     int num_1,num_2;//被减数、减数
     74 
     75     split(temp,num3);
     76     sort(num2,num1,num3);
     77 
     78     //做差
     79     num_1=num1[0]*1000+num1[1]*100+num1[2]*10+num1[3];
     80     num_2=num2[0]*1000+num2[1]*100+num2[2]*10+num2[3];
     81     temp=num_1-num_2;
     82     if(temp==0){
     83         printf("%04d - %04d = %04d
    ",num_1,num_2,temp);
     84         exit(0);
     85     } else{
     86         printf("%04d - %04d = %04d
    ",num_1,num_2,temp);
     87     }
     88     //返回差
     89     return temp;
     90 }
     91 
     92 int main(void) {
     93 
     94     int n; //题目中的N
     95 
     96     scanf("%4d", &n);
     97     int temp = n;
     98 
     99     while (temp != 6174) {
    100         temp = Kaprebar(temp);
    101     }
    102 
    103     return 0;
    104 }

     

    题目链接:

    http://pat.zju.edu.cn/contests/pat-b-practise/1019

    .

  • 相关阅读:
    HUST 1584 摆放餐桌
    HUST 1585 排队
    HUST 1583 长度单位
    树状数组 poj2352 Stars
    Visual Studio2013应用笔记---WinForm事件中的Object sender和EventArgs e参数
    倒置输入的数 Exercise07_02
    指定等级 Exercise07_01
    检测密码 Exercise06_18
    一年的天数 Exercise06_16
    数列求和 Exercise06_13
  • 原文地址:https://www.cnblogs.com/boomkeeper/p/1019b.html
Copyright © 2020-2023  润新知