*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\n",num_1,num_2,temp);
 84         exit(0);
 85     } else{
 86         printf("%04d - %04d = %04d\n",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

.

时间: 2024-08-07 08:40:31

*1019. 数字黑洞的相关文章

PAT乙级 1019. 数字黑洞 (20)

1019. 数字黑洞 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 018

PAT-乙级-1019. 数字黑洞 (20)

1019. 数字黑洞 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 018

PAT 1019. 数字黑洞

1019. 数字黑洞 (20) 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 61747641 - 1467 = 6174

1019 数字黑洞 (20 分)

题目链接:1019 数字黑洞 (20 分) 这道题目:没有太难的地方,但是因为基础不够牢固,很多操作花的时间较长,甚至有些参考网上的方法. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int string_to_int(string str) 5 { 6 int num; 7 stringstream ss; 8 ss<<str; 9 ss>>num; 10 return num; 11 } 12 13 s

1019. 数字黑洞 (20) (数学啊 ZJU_PAT)

题目链接:http://www.patest.cn/contests/pat-b-practise/1019 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 =

1019. 数字黑洞 (20)

时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 0189 = 9621962

PAT 1019. 数字黑洞 (20)

给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 现给定

PAT-乙级-1019 数字黑洞

给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的 6174,这个神奇的数字也叫 Kaprekar 常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174

1019 数字黑洞(字符串)

题目: 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 .