1023. Have Fun with Numbers (20)

来源:互联网 发布:java 蓝牙通信协议 编辑:程序博客网 时间:2024/06/05 02:52

题目链接:https://www.patest.cn/contests/pat-a-practise/1023


题目大意:判断a和2*a中每一个数字的个数是否相同。


解题思路:

  • 为便于统计数字的个数使用字符串保存数字a,然后计算2*a
  • 再统计两者中0,1,···9的个数
  • 比较两者中每个数字的个数是否相同

代码如下:

#include <iostream>#include <string>using namespace std;int cntnum1[10]={0};int cntnum2[10]={0};int main(int argc, char const *argv[]){    string a,b;    cin>>a;    b=a;//b用来保存a*2    int tmp=0;    for(int i=a.length()-1;i>=0;i--){//该循环用来计算a*2        cntnum1[a[i]-'0']++;        b[i]=((a[i]-'0')*2+tmp)%10+'0';        if(((a[i]-'0')*2+tmp)<10)            tmp=0;        else            tmp=1;    }    if(tmp==1)        b='1'+b;    for(int i=0;i<b.length();i++)        cntnum2[b[i]-'0']++;    for(int i=0;i<10;i++){        if(cntnum1[i]!=cntnum2[i]){//判断2*a中每个数字的个数与a的是否相同            cout<<"No"<<endl<<b<<endl;            return 0;        }    }    cout<<"Yes"<<endl<<b<<endl;    return 0;}
原创粉丝点击