poj1002 487-3279

题目大意:
    电话号码用一种能让人记住的方式输入,然后统计号码:有重复的输出号码,并输出重复次数;如果没有重复,则输出 Noduplicates.  

题目分析:
     本来关键在于怎么统计电话号码,用一个大型数组,数组下标表示电话号码,数组内容表示电话号码重复的次数。

题目代码:
#include
#include
 using namespacestd;
 int count[10000000];  //用来对电话号码进行计数

voidchangeToInt(char *phone);
voidchangeToChar(int x);

 int main()
 {
     char phone[20];
     bool flag;
     int n,len;
     int i,j;
     cin>>n;
    memset(count,0,sizeof(count));
     while(n--)
     {
        cin>>phone;
        len=strlen(phone);
     
        for(i=0;i
        {
          switch(phone[i])
           {
              case 'A':
              case 'B':
              case 'C':
              {phone[i]='2';break;}

              case 'D':
              case 'E':
              case 'F':
              {phone[i]='3';break;}

              case 'H':
              case 'I':
              case 'G':
              {phone[i]='4';break;}

              case 'J':
              case 'K':
              case 'L':
              {phone[i]='5';break;}

              case 'M':
              case 'N':
              case 'O':
              {phone[i]='6';break;}

              case 'P':
              case 'R':
              case 'S':
              {phone[i]='7';break;}

              case 'T':
              case 'U':
              case 'V':
              {phone[i]='8';break;}

              case 'W':
              case 'X':
              case 'Y':
              {phone[i]='9';break;}
           }
        }

         changeToInt(phone);

    
     }
     flag=true;                     //判断是否有重复的号码
     for(i=0;i<10000000;i++)
     {
      if(count[i]>1)
       {
          changeToChar(i);
           cout<<""<<count[i]<<endl;
          flag=false;
       }

     }

     if(flag)
       cout<<"Noduplicates."<<endl;

    return 0;
 }


 void changeToInt(char*phone)   //转换为int用来计数
 {
    int len=strlen(phone);
    int sum=0,i;
    for(i=0;i
    {
        if(phone[i]=='-')
        continue;

        else
        {
           sum=10*sum+(phone[i]-'0');
        }
    }

     count[sum]++;
 }

 void changeToChar(int x)    //转换为char类型,如(0000000时sum=0,输出就要转换)
 {
    int temp=1000000;
    int i;
    for(i=1;i<=8;i++)
       {
           if(i==4)
          {
             cout<<"-";
             continue;
          }

         cout<<x/temp;
         x=x%temp;
         temp=temp/10;
       }
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值