首页 > 其他分享 >PAT乙级 1019.游戏黑洞(测试点2.3.4.5)

PAT乙级 1019.游戏黑洞(测试点2.3.4.5)

时间:2024-09-01 17:21:24浏览次数:14  
标签:4.5 输出 PAT 数字 测试点 10 int 6174 string

一、题目

给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。

例如,我们从6767开始,将得到

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...
现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。

输入格式:
输入给出一个 (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

二、代码

#include <iostream>
#include<vector>
#include <algorithm>
#include<cstring>
using namespace std;
bool cmp1(int a,int b) {
	return a > b;//大到小
}
bool cmp2(int a, int b) {
	return b > a;//小到大
}
int main() {
	string n;
	cin >> n;
	do {
		//确保是四位
		vector<int> v = { 0,0,0,0 };
		for (int i = 0; i < n.length(); i++) {
			v[i] = n[i] - '0';//vector是int类型,n是string 类型,转换!!
		}
		//递减
		sort(v.begin(), v.end(), cmp1);
		for (auto it = v.begin(); it != v.end(); it++) {
			cout << *it;
		}
		int a = v[0] * 1000 + v[1] * 100 + v[2] * 10 + v[3] * 1;
		cout << " - ";
		//递增
		sort(v.begin(), v.end(), cmp2);
		for (auto it = v.begin(); it != v.end(); it++) {
			cout << *it;
		}
		int b = v[0] * 1000 + v[1] * 100 + v[2] * 10 + v[3] * 1;
		cout << " = ";
		int x = a - b;
		//n为string 类型
		n = "0000";//例,当n初始为5时,只存在n[0],所以下面的循环数组越界,现在将n赋值为四位
		for (int i = 3; i >= 0; i--) {
			n[i] = x % 10 + '0';
			x = x / 10;
		}
		cout << n << endl;
	}while (n != "6174" && n != "0000");
}

三、思考

遇到的问题:

循环条件:

!=“6147“&&!=”0000“

类型转换:

vector<int>v和string n转换时-'0'。

输出首位为0:

转换为vector,直接输出各位数字。(两种思路,一种中间用数字,最后输出注意高位补0,;一种中间用vector,string计算时转数字)

代码超时:

当输入的非四位数,即2,36,654时,出现string subscript out of range的提示:

强行赋值为四位。

//n为string 类型
n = "0000";//例,当n初始为5时,只存在n[0],所以下面的循环数组越界,现在将n赋值为四位
for (int i =3; i>=0; i--) {
	n[i] = x % 10+'0';
	x = x / 10;
}

  测试点5:

while do时先判断,忽略了n=6147的情况。

故应为do while循环。

标签:4.5,输出,PAT,数字,测试点,10,int,6174,string
From: https://blog.csdn.net/hhhsyyy/article/details/141785978

相关文章

  • Patreon全攻略:创作者与粉丝的互动平台与订阅指南
    Patreon是什么?Patreon是一个会员付费制的内容平台:粉丝付费支持喜欢的内容创作者,内容创作者通过提供内容来赚钱。支持各种创作者,包括视频/电影,漫画,播客,喜剧,手工DIY,音乐,插画,游戏,科学,舞蹈戏剧,写作,动画,摄影,教育等。创作者们通过定期发布独家内容,然后粉丝进行付费或者免费订阅......
  • 第七章 项目布局实现(7.4.5)——ElementPlus 自定义命名空间
    7.4.5ElementPlus自定义命名空间参考:https://cn.element-plus.org/zh-CN/guide/namespace.htmlElementPlus提供的默认命名空间为el。在特殊情况下,我们需要自定义命名空间。我们使用sass书写样式,必须同时设置ElConfigProvider和scss$namespace。设置ElC......
  • 设计模式 -- 代理模式(Proxy Pattern)
    基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不......
  • 设计模式 -- 享元模式(Flyweight Pattern)
    1问题引出        小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:有客户要求以新闻的形式发布有客户人要求以博客的形式发布有客户希望以微信公众号的形式发布直接复制粘贴一份,然后根据......
  • 2024-08-30 error [email protected]: The engine "node" is incompatible with this m
    删掉依赖,使用yarn重新拉取,保错如下:[email protected]:Theengine"node"isincompatiblewiththismodule.Expectedversion">=18".Got"16.19.1" 错误[email protected]:引擎“节点”与此模块不兼容。预期版本“>=18”。得到“16.19.1”意思就是yarn拉取依赖过程中......
  • 使用Opatch命令报错:Java (1.7) could not be located. OPatch cannot proceed!
    问题描述[oracle@servernamedb]$OPatch/opatchversionOPatch/opatch:line839:[:toomanyargumentsOPatch/opatch:line839:[:toomanyargumentsJava(1.7)couldnotbelocated.OPatchcannotproceed!OPatchreturnswitherrorcode=1解决方案删除OPatch目录......
  • 怎么用xpath写drissionpage?或者用相对位置?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【黑科技·鼓包】问了一个Python网络爬虫处理的问题。问题如下:有没有大佬指点下怎么用xpath写drissionpage?或者用相对位置?我看了半天中文文档硬是写不出来。这是xpath //*[@id="ng-app"]/body/div/div/div[1]/......
  • springboot 接口接收参数的注解介绍(@RequestParam,@PathVariable,@RequestBody 等)
    springboot接收参数的注解介绍(使用方法)在SpringBoot中,接收参数的方式主要依赖于SpringMVC提供的注解。这些注解帮助你将HTTP请求中的参数绑定到控制器(Controller)方法的参数上。以下是一些常用的接收参数的注解:1.@RequestParam用法:用于将HTTP请求参数绑定到控制器的方......
  • pg14+etcd+Patroni 高可用配置流程
    pg14+etcd+Patroni高可用配置流程目录pg14+etcd+Patroni高可用配置流程基础配置IP规划:修改超级用户密码:在主库上创建流复制用户修改pg_hba文件备库重新创建数据目录:开启watchdog创建.pgpass生成备库在备库修改同步信息备库查看主库查看同步信息安装etcd下载etcd安装包:创建et......
  • 记Spring HTTP Invoker远程调用的使用(二)基于Servlet方式,配置servlet映射url-pattern实
    目录前言一、概念二、代码实现1.服务端实现2.客户端实现前言本篇接上一篇记SpringHTTPInvoker远程调用的使用(一)基于Url映射方式,DispatcherServlet统一处理实现-CSDN博客https://blog.csdn.net/u011529483/article/details/141678510?spm=1001.2014.3001.5501之......