PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642
PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642
题目描述:
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see the result if we double it again!
Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.
译: 注意到数字 123456789 是一个恰好由数字 1 到 9 组成的没有重复数字的 9 位数。将它翻倍我们将会得到 246913578 , 刚好也是一个由数字 1 到 9 组成的没有重复数字的 9 位数的一个不同排列。如果我们再翻一倍看看结果如何!
现在你要检查是否更多的数字具有这个性质。给定一个 k 位数,将其翻倍,你应该告诉这个结果的数字是否是由原先数字的不同的排列组成。
Input Specification (输入说明):
Each input contains one test case. Each case contains one positive integer with no more than 20 digits.
译:每个输入文件包含一个测试用例,每个用例包含一个不超过 20 位的正整数。
Output Specification (输出说明):
For each test case, first print in a line "Yes" if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or "No" if not. Then in the next line, print the doubled number.
译:对于每个测试用例,如果将输入的数字翻倍后的结果是由原先数字的一个不同排列,在第一行中输出 Yes ,否则输出 No 。在接下来的一行中,输出翻倍后的数字。
Sample Input (样例输入):
1234567899
Sample Output (样例输出):
Yes
2469135798
The Idea:
设计到大整数(超过 long long 范围)的运算,虽然只是一个简单的翻倍,所以需要用数组来存储输入数据,为了在输出时更方便,我选择了直接使用 string 类型存储输入数据和输出结果。
对于大整数的加倍,从最后一位开始,将每一位数翻倍,对应位置上的结果如果大于等于 10 ,则进位。
对于比较两者是否是一个同一群数字的不同排列,我又偷懒的选择了利用 map ,直接统计每个数字出现的次数,如果每个数字出现的次数都相同,那么显然是同一个排列。
The Codes:
#include<bits/stdc++.h>
using namespace std;
map<char , int > mp1 , mp2;
int main(){
string s , ans = "";
cin >> s ;
int temp , flag = 0 ;
for(int i = s.size() - 1 ; i >= 0 ; i --){
mp1[s[i]] ++ ; // 记录输入数字的每个数字出现的次数
temp = (s[i] - '0') * 2 + flag ; // 计算该位置上每位数的翻倍结果,加上低位来的进位
ans += to_string(temp % 10) ; // 拼接到结果中
flag = temp / 10 ; // 重新计算 进位
}
if(flag) ans += to_string(flag) ;
for(int i = ans.size() -1 ; i >= 0 ; i --) mp2[ans[i]] ++ ; // 记录结果的每个数字出现的次数
printf((mp1 == mp2)?"Yes\n":"No\n"); // 判断是否是同样数字的不同排列
reverse(ans.begin() , ans.end()) ; // ans 倒置才是翻倍结果
cout<< ans <<endl;
return 0;
}
PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642的更多相关文章
- PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642
PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642 题目描述: Given any string of N (≥5) ...
- PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分) 凌宸1642
PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分) 凌宸1642 题目描述: This time, you are suppos ...
- PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642
PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642 题目描述: 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每 ...
- PAT (Advanced Level) Practice 1001 A+B Format (20 分)
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805528788582400 Calculate a+b and ...
- PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642
PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642 题目描述: The task is really simple: ...
- PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642
PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...
- PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642
PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642 题目描述: Being unique is so important to peo ...
- PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642
PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642 题目描述: To prepare for PAT, the judge someti ...
- PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642
PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642 题目描述: People in Mars represent the c ...
随机推荐
- JSON-LD 结构化数据
JSON-LD 结构化数据 SEO JSON-LD JSON for Linking Data JSON 链接数据 https://json-ld.org/ https://en.wikipedia. ...
- flex layout & demos
flex layout & demos https://codepen.io/xgqfrms/pen/jjLPKN https://css-tricks.com/snippets/css/a- ...
- SVG & Sprite & symbol & use
SVG & Sprite & symbol & use https://www.zhangxinxu.com/sp/svgo/ https://www.zhangxinxu.c ...
- 链表、栈、队列、KMP相关知识点
链表.栈与队列.kmp; 数组模拟单链表: 用的最多的是邻接表--就是多个单链表: 作用:存储树与图 需要明确相关定义: 为什么需要使用数组模拟链表 比使用结构体 或者类来说 速度更快 代码简洁 算法 ...
- Java ThreadPoolExecutor详解
ThreadPoolExecutor是Java语言对于线程池的实现.池化技术是一种复用资源,减少开销的技术.线程是操作系统的资源,线程的创建与调度由操作系统负责,线程的创建与调度都要耗费大量的资源,其 ...
- CSS布局,div居中,文字居中
.main { width: 100%; margin: 0 auto; .banner { img { width: 100%; } } .article { margin-bottom: 100p ...
- 我ssh框架遇到报错及处理方式
Exception encountered during context initialization - cancelling refresh attempt 修改hbm.xml后遇到的问题,错误可 ...
- 按照阿里巴巴规范创建Java线程池
前言 Executors Executors 是一个Java中的工具类.提供工厂方法来创建不同类型的线程池. 常用方法: 1.newSingleThreadExecutor 介绍:创建一个单线程的 ...
- KnowRbao_uni-app
uni-app开发项目模板 主要的代码如下: pages.json 这里是添加页面的路径代码还可以设置标题: { "pages" : [ //pages数组中第一项表示应用启动页, ...
- CNN结构演变总结(一)经典模型
导言: 自2012年AlexNet在ImageNet比赛上获得冠军,卷积神经网络逐渐取代传统算法成为了处理计算机视觉任务的核心. 在这几年,研究人员从提升特征提取能力,改进回传梯度更新效果 ...