数据结构练习 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]; } } }
结果