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.
Each input contains one test case. Each case contains one positive integer with no more than 20 digits.
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.
我的代码:
#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);
}
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);
}
相关文章推荐
- 【PAT Advanced Level】1023. Have Fun with Numbers (20)
- Have Fun with Numbers及循环链表(约瑟夫问题)
- PAT Have Fun with Numbers
- Have Fun with Numbers (大数)
- PAT甲级 1023. Have Fun with Numbers (20)
- PAT 甲级 1023. Have Fun with Numbers(大数的两倍运算)
- 自测4. Have Fun with Numbers
- 1023. Have Fun with Numbers (20)
- 【PAT (Advanced Level)】1023. Have Fun with Numbers (20)
- 1023. Have Fun with Numbers 解析
- 自测-4 Have Fun with Numbers
- 1023. Have Fun with Numbers
- PAT-A 1023. Have Fun with Numbers (20)
- PAT_A 1023. Have Fun with Numbers (20)
- 数据结构起步能力自测4-have fun with numbers
- PAT 1023. Have Fun with Numbers
- pat 1023. Have Fun with Numbers (大水)
- 00-自测4. Have Fun with Numbers (20)
- PAT-A-1023. Have Fun with Numbers (20)
- PAT 1023. Have Fun with Numbers (20) 模拟大数乘法