PAT Basic 1104 数字?洞 (20) [数学问题-简单数学]

题目

给定任?个各位数字不完全相同的4位正整数,如果我们先把4个数字按?递增排序,再按?递减排序,然后?第1个数字减第2个数字,将得到?个新的数字。?直重复这样做,我们很快会停在有“数字?洞”之称的6174,这个神奇的数字也叫Kaprekar常数。例如,我们从6767开始,将得到
7766 – 6677 = 1089
9810 – 0189 = 9621
9621 – 1269 = 8352
8532 – 2358 = 6174
7641 – 1467 = 6174
… …
现给定任意4位正整数,请编写程序演示到达?洞的过程。
输?格式:
输?给出?个(0, 10000)区间内的正整数N。
输出格式:
如果N的4位数字全相等,则在??内输出“N – N = 0000”;否则将计算的每?步在??内输出,直到6174作为差出现,输出格式?样例。注意每个数字按4位数格式输出。
输?样例1:
6767
输出样例1:
7766 – 6677 = 1089
9810 – 0189 = 9621
9621 – 1269 = 8352
8532 – 2358 = 6174
输?样例2:
2222
输出样例2:
2222 – 2222 = 0000

题目分析

已知一个最多有4位的整数N,对N降序排列-对N升序排列=下一次的整数N,循环处理直到N=6174为止,打印其处理过程(特殊情况:如果N的4位数字相同,打印并退出处理)

解题思路

  1. 用字符串接收整数s,并用0左边补齐整数到4位
  2. a=s,b=s,a降序排列后转为数字an,b升序排列转为数字bn
  3. bn-an即为下次处理的整数

易错点

  1. 若输入的数字为6174,需要打印7641 - 1467 = 6174(否则测试点5错误)(建议使用do...while可以省去针对开始输入为6174的单独处理)

知识点

  1. 字符串中字符排序
    sort(s.begin(),s.end(),cmp);
  2. 利用字符串操作对齐整数
    2.1 右对齐。如:4位对齐,输入1,要求得到"0001";输入11,要求得到"0011"
    s.insert(0,4-s.length,‘0‘);
    2.2 左对齐。4位对齐,输入1,要求得到"1000",输入11,要求得到"1100"
    s.insert(s.length,4-s.length,‘0‘);

Code

Code 01

#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(char a, char b) {
    return a>b;
}
int main(int argc, char * argv[]) {
    string s,a,b;
    cin>>s;
    s.insert(0,4-s.length(),'0');
    do {
        a=s,b=s;
        sort(a.begin(),a.end(),cmp);
        sort(b.begin(),b.end());
        int res = stoi(a)-stoi(b);
        s=to_string(res);
        s.insert(0,4-s.length(),'0');
        cout<<a<<" - "<<b<<" = "<<s<<endl;
    } while(s!="6174"&&s!="0000");

    return 0;
}

原文地址:https://www.cnblogs.com/houzm/p/12260686.html

时间: 2024-08-26 01:40:48

PAT Basic 1104 数字?洞 (20) [数学问题-简单数学]的相关文章

PAT Basic 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 Basic 1057 数零壹 (20 分)

给定一串长度不超过 1 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0.多少 1.例如给定字符串 PAT (Basic),其字母序号之和为:16+1+20+2+1+19+9+3=71,而 71 的二进制是 1000111,即有 3 个 0.4 个 1. 输入格式: 输入在一行中给出长度不超过 1.以回车结束的字符串. 输出格式: 在一行中先后输出 0 的个数和 1 的个数,其间以空格分隔

PAT 乙级 1048 数字加密(20) C++版

1048. 数字加密(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求实现一种数字加密方法.首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余--这里用J代表10.Q代表11.K代表12:对偶数位,用B的数字减去A的数字,若结果为负数,则再加10.这里令个位为第1位. 输入格式: 输入在一行中依次给出A和B,均为不

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乙级 1012. 数字分类 (20)

1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: A3 = 被5除后余2的数字的个数: A4 = 被5除后余3的数字的平均数,精确到小数点后1位: A5 = 被5除后余4的数字中最大数

C++&#183;PAT乙级1012.数字分类 (20/20)

/* 1012. 数字分类 (20) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: A3 = 被5除后余2的数字的个数: A4 = 被5除后余3的数字的平均数,精确到小数点后1位: A5 = 被5除后余4的数字中最大数字. 输入格式: 每个输入包含1个测试用例.每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的

PAT Basic 1007 素数对猜想 (20) [数学问题-素数]

题目 让我们定义 dn 为:dn = pn+1 – pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数."素数对猜想"认为"存在?穷多对相邻且差为2的素数".现给定任意正整数N (< 105),请计算不超过N的满?猜想的素数对的个数. 输?格式: 每个测试输?包含1个测试?例,给出正整数N. 输出格式: 每个测试?例的输出占??,不超过N的满?猜想的素数对的个数. 输?样例: 20 输出样例: 4 题目分析 给出整数N,判断不

PAT Basic 1132 数列的?段和(20) [数学问题-简单数学]

题目 给定?个正数数列,我们可以从中截取任意的连续的?个数,称为?段.例如,给定数列{0.1, 0.2, 0.3,0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4)这10个?段.给定正整数数列,求出全部?段包含的所有的数之和.如本例中10个?段总和是0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5

PAT Basic 1013 数素数 (20) [数学问题-素数]

题目 令Pi表示第i个素数.现任给两个正整数M <= N <= 10^4,请输出PM到PN的所有素数. 输?格式: 输?在??中给出M和N,其间以空格分隔. 输出格式: 输出从PM到PN的所有素数,每10个数字占1?,其间以空格分隔,但?末不得有多余空格. 输?样例: 5 27 输出样例: 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 题目分析 打印从第m个质数到第n个质数之间所有质数,每10个一行