zoukankan      html  css  js  c++  java
  • pat00-自测4. Have Fun with Numbers (20)

    00-自测4. Have Fun with Numbers (20)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    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 file 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
    

    提交代码

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <string>
     4 #include <queue>
     5 #include <cmath>
     6 #include <iostream>
     7 using namespace std;
     8 int ti[10],num1[25],num2[25];
     9 char num[25];
    10 int main(){
    11     //freopen("D:\INPUT.txt","r",stdin);
    12     scanf("%s",num);
    13 
    14     //cout<<num<<endl;
    15 
    16     int i;
    17     for(i=0;i<strlen(num);i++){
    18         num1[i]=num[i]-'0';
    19         ti[num1[i]]++;
    20         num2[i]=2*num1[i];
    21     }
    22     int k=0,t;
    23     for(i=strlen(num)-1;i>=0;i--){
    24         t=num2[i]+k;
    25         num2[i]=t%10;
    26         ti[num2[i]]--;
    27         k=t/10;
    28     }
    29     bool can=false;
    30     if(!k){
    31         for(i=0;i<=9;i++){
    32             if(ti[i]){
    33                 break;
    34             }
    35         }
    36         if(i==10){
    37             can=true;
    38         }
    39     }
    40     if(can){
    41         printf("Yes
    ");
    42     }
    43     else{
    44         printf("No
    ");
    45     }
    46     if(k){
    47         printf("%d",k);
    48     }
    49     for(i=0;i<strlen(num);i++){
    50         printf("%d",num2[i]);
    51     }
    52     printf("
    ");
    53     return 0;
    54 }
  • 相关阅读:
    linq in 查询
    sql数据分组取第一条
    获取mac地址
    计算机网络体系结构分层 (OSI TCP/IP)
    2048游戏代码
    go——变量、类型、常量、函数
    关于装饰器 开放封闭
    linux杂碎知识
    crawl——scrapy(配置文件,持久化,请求传递参数,提高爬虫效率,爬虫中间件,集成selenium,去重规则)
    crawl——xpath使用
  • 原文地址:https://www.cnblogs.com/Deribs4/p/4716690.html
Copyright © 2011-2022 走看看