数据库 树莓派USB 双重检验锁 pdo onclick Component oracle删除表字段 mysql设置自增初始值 java手机验证码 判断bigdecimal是否为空 python实例 python读取数据库 java正则表达式 java队列 java运算 黑帮之地修改器 navicat注册机 程序员面试宝典 英雄联盟设置 电脑书籍下载 js代码混淆工具 txplatform qq魔法卡片登陆 调试js 0000008e 内存条有什么用 小米开发者选项 人脸识别代码 u盘防复制 人马上单天赋 total同级生2下载 大家来goldwave使用教程 系统重装软件下载 微信获取用户信息 smtp邮件服务器 判断对象是否为空 pfc软件 pr怎么倒放 vibe算法 wtf文件夹
当前位置: 首页 > 学习教程  > 编程语言

PTA 1019 C++实现 数字黑洞(注意测试点5)

2020/8/31 14:19:39 文章标签:

文章目录

  • 题目
    • 1019 数字黑洞 (20分)
  • 分析
  • 代码

题目

1019 数字黑洞 (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,104)N 输入给出一个(0,10^4 )区间内的正整数 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

分析

可以把输入的正整数n转化为字符串,再把字符串排序。注意,输入的数不一定是4位数,是(0,10^4)的数。另外,测试点5是输入的6174.注意这种情况。

排序的有关代码可以自己写,也可以直接调用sort函数。sort函数是采用的快排的方法。
sort() 是对数组进行排序的函数,头文件是<algorithm>
sort()函数有三个参数 分别为 (数组的首地址,结束的地址,排序的方式)
第三个参数可以省略, 默认为升序。也可以自己写。如bool jud1(char x1, char x2)
bool jud2(char x1, char x2)调用时sort(s, s + 4,jud1)

代码

#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
bool jud1(char x1, char x2)
{
	return x1 > x2 ? true : false;
}
bool jud2(char x1, char x2)
{
	return x1 < x2 ? true : false;
}
int Sort(int x, int d)
{
	char s[5] = {"0000"};
	if (x >= 1000) {
		sprintf(s, "%d", x);
	}
	else {
		int j = 3;
		while (x > 0) {
			s[j] = s[j]+x % 10;
			x /= 10;
			j--;
		}
	}
	if (d == 1) sort(s, s + 4,jud1);
	else sort(s, s + 4, jud2);
	return atoi(s);
}
int main() 
{
	int n;
	int x1, x2, c;
	cin >> n;
	c = n;
	if (c == 6174)goto a;
	while (c != 6174 && c != 0) {
	a:
		x1 = Sort(c, 1);
		x2 = Sort(c, 2);
		c = x1 - x2;
		cout << setfill('0') << setw(4) << x1 
			<< " - " << setw(4) << x2 
			<< " = " << setw(4) << c << endl;
	}
	return 0;
}

本文链接: http://www.dtmao.cc/news_show_150213.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?