您的位置:首页 > 理论基础 > 数据结构算法

数据结构练习 00-自测4. Have Fun with Numbers (20)

2015-03-05 13:26 281 查看

Noticethatthenumber123456789isa9-digitnumberconsistingexactlythenumbersfrom1to9,withnoduplication.Doubleitwewillobtain246913578,whichhappenstobeanother9-digitnumberconsistingexactlythenumbersfrom1to9,onlyinadifferentpermutation.Checktoseetheresultifwedoubleitagain!

Nowyouaresupposetocheckiftherearemorenumberswiththisproperty.Thatis,doubleagivennumberwithkdigits,youaretotelliftheresultingnumberconsistsofonlyapermutationofthedigitsintheoriginalnumber.

InputSpecification:

Eachinputfilecontainsonetestcase.Eachcasecontainsonepositiveintegerwithnomorethan20digits.

OutputSpecification:

Foreachtestcase,firstprintinaline"Yes"ifdoublingtheinputnumbergivesanumberthatconsistsofonlyapermutationofthedigitsintheoriginalnumber,or"No"ifnot.Theninthenextline,printthedoublednumber.

SampleInput:

1234567899

SampleOutput:

Yes
2469135798




#include<iostream>
#include<string>
#include<sstream>
usingnamespacestd;
intsort(inta[],intn){
inttemp;
for(inti=0;i<n;i++){
for(intj=i;j<n;j++){
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
return0;
}
intmain(){
stringnum;
stringstreamss;
intsize,j=0;
cin>>num;
size=num.size();
int*a=newint[size];
int*b=newint[size+1];
int*doubleNum=newint[size+1];
for(inti=0;i<size+1;i++){
doubleNum[i]=0;
b[i]=0;
}
for(inti=0;i<size;i++){
a[i]=num[i]-48;
}
for(inti=size;i>0;i--){
if(a[i-1]+a[i-1]>=10){
doubleNum[i]+=(a[i-1]+a[i-1])%10;
doubleNum[i-1]+=1;
}else{
doubleNum[i]+=a[i-1]+a[i-1];
}
}
if(doubleNum[0]==0){
for(inti=0;i<size;i++){
b[i+1]=doubleNum[i+1];
}
sort(doubleNum,size+1);
sort(a,size);
for(inti=0;i<size;i++){
if(a[i]==doubleNum[i+1]){
j++;
}
}
if(j==size){
cout<<"Yes"<<endl;
for(inti=0;i<size;i++){
cout<<b[i+1];
}

}else{
cout<<"No"<<endl;
for(inti=0;i<size;i++){
cout<<b[i+1];
}

}
}else{
cout<<"No"<<endl;
for(inti=0;i<size+1;i++){
cout<<doubleNum[i];
}
}

}



测试
结果






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航