您的位置:首页 > 其它

7-40 Have Fun with Numbers(30 分)

2017-12-20 00:06 239 查看
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.


Input Specification:

Each input contains one test case. Each case contains one positive integer with no more than 20 digits.


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.


Sample Input:

1234567899


Sample Output:

Yes
2469135798

我的代码:
#include<stdio.h>
void sort(int a[],int n)
{
int i,j;
for(i=1;i<n;i++)
{
int temp=a[i];
for(j=i;j>0&&a[j-1]>temp;--j)
a[j]=a[j-1];
a[j]=temp;
}
}
int
4000
main(){
char s[21];
int i;
int before[20]={0};
int after[20]={0};
//输入
for(i=0;i<20;i++){
scanf("%c",&s[i]);
if(s[i]=='\n') break;
}
//读入数组
int x=i-1;
for(int j=x;j>=0;j--){
before[j]=(s[j]-'0');
}
int mid,book=0;
//考虑位数不匹配的情况
if(s[0]>='5'){
for(int g=i+1;g>=0;g--)
s[g+1]=s[g];
i++;
s[0]='0';
}
//加倍
for(i=i-1;i>=0;i--){
if(book==1){
mid=(s[i]-'0')*2+1;
book=0;
}else mid=(s[i]-'0')*2;
if(mid>=10){
book=1;
s[i]=mid%10+'0';
}else{
s[i]=mid+'0';
}
}
//读入数组
for(int m=x;m>=0;m--){
after[m]=(s[m]-'0');
}
//判断
sort(before,20);
sort(after,20);
int ise=0;
for(int z=0;z<20;z++){
if(before[z]!=after[z])ise++;
}
if(ise>0) printf("No\n%s",s);
else printf("Yes\n%s",s);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: