写在前面
- 正确立即题目
- permutation: 排列(方式);组合(方式)
- 通用方法
- 循环遍历计算结果,拼成字符串
- map封装大数字符次数结果,循环比较倍数结果与原数字符个数及种类
- 不手生的情况下,10分钟内a题
测试用例
input:
1234567899
output:
Yes
2469135798
ac代码
- 时间长手生,撸代码时间耗费偏多
#include<map>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
string in_num, res_num;
cin >> in_num;
int yushu = 0, tp_num=0;
map<char, int> in_map, res_map;
for(int i=in_num.size()-1; i>=0; i--)
{
tp_num = (in_num[i]-'0')*2;
res_num += (yushu + tp_num%10 + '0');
in_map[in_num[i]] +=1;
res_map[yushu + tp_num%10 + '0'] +=1;
yushu = tp_num/10;
}
if(yushu>0) res_num += (yushu+'0');
reverse(res_num.begin(), res_num.end());
string res_flag="Yes";
if(res_num.size()!=in_num.size()) res_flag = "No";
for(int i=0; i<in_num.size(); i++)
{
if(in_map[in_num[i]]!=res_map[in_num[i]])
{
res_flag = "No";
break;
}
}
cout << res_flag << endl;
cout << res_num;
return 0;
}
- 部分优化
#include<map>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
string in_num, res_num;
cin >> in_num;
int yushu = 0, tp_num=0;
map<char, int> in_map;
for(int i=in_num.size()-1; i>=0; i--)
{
tp_num = (in_num[i]-'0')*2;
res_num += (yushu + tp_num%10 + '0');
in_map[in_num[i]] +=1;
in_map[yushu + tp_num%10 + '0'] -=1;
yushu = tp_num/10;
}
if(yushu>0) res_num += (yushu+'0');
reverse(res_num.begin(), res_num.end());
string res_flag="Yes";
if(res_num.size()!=in_num.size()) res_flag = "No";
for(int i=0; i<in_num.size(); i++)
{
if(in_map[in_num[i]]!=0)
{
res_flag = "No";
break;
}
}
printf("%s\n", res_flag.c_str());
printf("%s", res_num.data());
return 0;
}
参考代码
- 参考代码
- int book[10];
- 循环统计。原数字符出现次数做加法,倍数结果字符出现次数做减法,最后结果为0,则Yes;否则为No
- 优点: 节省资源、算力
#include <cstdio>
#include <string.h>
using namespace std;
int book[10];
int main() {
char num[22];
scanf("%s", num);
int flag = 0, len = strlen(num);
for(int i = len - 1; i >= 0; i--) {
int temp = num[i] - '0';
book[temp]++;
temp = temp * 2 + flag;
flag = 0;
if(temp >= 10) {
temp = temp - 10;
flag = 1;
}
num[i] = (temp + '0');
book[temp]--;
}
int flag1 = 0;
for(int i = 0; i < 10; i++) {
if(book[i] != 0)
flag1 = 1;
}
printf("%s", (flag == 1 || flag1 == 1) ? "No\n" : "Yes\n");
if(flag == 1) printf("1");
printf("%s", num);
return 0;
}