487-3279( C/C++数组初始化的一些误区)

每个人都喜欢有令人难忘的电话号码。要想让电话号码变得令人难忘的一种方法是拼出一个令人难忘的单词或短语。例如,你可以拨打滑铁卢大学的电话,拨打令人难忘的电话号码TUT-GLOP。
有时只有一部分号码被用来拼写一个单词,例如,你可以拨打310-gino从Gino’s订购披萨。
要使电话号码令人难忘的另一种方法是以一种令人难忘的方式对数字进行分组。你可以从比萨饼小屋中订购比萨饼,方法是拨打他们的“3个10”,即号码3-10-10-10。
电话号码的标准格式是七位的十进制数字,第三和第四位之间包含连字符(例如888-1200)。电话的键盘提供字母到数字的映射,如下所示:

   A, B, C映射到2

   D, E, F映射到3

   G, H, I映射到4

   J, K, L映射到5

   M, N, O映射到6

   P, R, S映射到7

   T, U, V映射到8

   W, X, Y映射到9

   Q和Z没有映射。连接符不拨号,必要时可加上或去除。TUT-GLOP的标准格式是888-4567,310-GINO的标准格式是310-4466,3-10-10-10的标准格式是310-1010。

当两个电话号码有相同的标准格式时是等价的(拨同样的号码)。

你的公司正在编制本地企业的电话号码目录,作为质量控制的一部分,你需要检查没有两个(或多个)企业具有相同的电话号码。

【输入形式】

输入包括一个案例。输入的第一行为一个正整数,指定目录中电话号码的数目(最多100,000)。其余的各行列出目录中的电话号码,每个号码单独占一行。每个电话号码都是一个由十进制数字、大写字母(不包括Q和z)和连字符组成的字符串。字符串中的七个字符或是数字或是字母。

【输出形式】

对于出现超过一次的每个号码,按照标准格式每个输出一行,然后是空格,接着输出出现的次数。只出现1次的电话号码不输出。

【样例输入】

12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279

【样例输出】

310-1010 2
487-3279 4
888-4567 3

【样例说明】
【评分标准】


#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
char pho[200][8];

int charToInt(int u){
    int ans = 0;
    for(int i=0; i<7; ++i){
        ans=ans*10+(pho[u][i]-'0');
    }
    return ans;
}
int main()
{
    int n;
    cin>>n;
    int nn=n;
    int group=0;
    int lenall[n]={0};
    int lenall_step=0;
    int phoall[n]={0};
    while(nn--)
    {
        int step=0;
        string str;
        cin>>str;
        lenall[lenall_step]=str.size();
        for(int i=0;i<lenall[lenall_step];i++)
        {
            if(str[i]=='-') continue;
            else if(str[i]=='0'||str[i]=='1'||str[i]=='2'||str[i]=='3'||str[i]=='4'
                ||str[i]=='5'||str[i]=='6'||str[i]=='7'||str[i]=='8'||str[i]=='9')
            {
                pho[group][step]=str[i];
                step++;
            }
            else if(str[i]=='A'||str[i]=='B'||str[i]=='C')
            {
                pho[group][step]='2';
                step++;
            }
            else if(str[i]=='D'||str[i]=='E'||str[i]=='F')
            {
                pho[group][step]='3';
                step++;
            }
            else if(str[i]=='G'||str[i]=='H'||str[i]=='I')
            {
                pho[group][step]='4';
                step++;
            }
            else if(str[i]=='J'||str[i]=='K'||str[i]=='L')
            {
                pho[group][step]='5';
                step++;
            }
            else if(str[i]=='M'||str[i]=='N'||str[i]=='O')
            {
                pho[group][step]='6';
                step++;
            }
            else if(str[i]=='P'||str[i]=='R'||str[i]=='S')
            {
                pho[group][step]='7';
                step++;
            }
            else if(str[i]=='T'||str[i]=='U'||str[i]=='V')
            {
                pho[group][step]='8';
                step++;
            }
            else if(str[i]=='W'||str[i]=='X'||str[i]=='Y')
            {
                pho[group][step]='9';
                step++;//超前一步 
            }
        }
        phoall[group]=step;
        group++;//超前一步 代表数量 
        lenall_step++;  
    }

//cout<<endl<<endl; 
//for(int i=0;i<group;i++)
//{
//  for(int j=0;j<phoall[i];j++)
//  {
//      cout<<pho[i][j];
//  }
//  cout<<endl;
//} 

    for(int i=0;i<group;i++)
    {
        for(int j=i+1;j<group;j++)
        {
//          int v=7;
//          int first=0;
//          for(int e=0;e<7;e++)
//          {
//              if(first==0)
//              {
//                  if(int(pho[i][e])>int(pho[j][e]))
//                  {
//                      cout<<"i: "<<i<<"j: "<<j<<endl;
//                      first=1;
//                      while(v--)
//                      {
//                          
//                          char ch;
//                          ch=pho[i][v];
//                          pho[i][v]=pho[j][v];
//                          pho[j][v]=ch;
//                      }
//                      break;
//                  }
//              }
//          }
            int num1 = charToInt(i);
            int num2 = charToInt(j);
//          cout<<num1<<" "<<num2<<endl;
            if(num1>num2){
                int v=7;
                while(v--)
                {       
                    char ch;
                    ch=pho[i][v];
                    pho[i][v]=pho[j][v];
                    pho[j][v]=ch;
                }
            }
        }
    }   


//  cout<<endl<<endl;
//for(int i=0;i<group;i++)
//{
//  for(int j=0;j<phoall[i];j++)
//  {
//      cout<<pho[i][j];
//  }
//  cout<<endl;
//}

    int flag[n];
    for(int i=0;i<n;i++)
    {
        flag[i]=1;
    }
    for(int i=0;i<group;i++)
    {
        if(flag[i]!=-1)
        {
            for(int j=i+1;j<group;j++)
            {
                if(flag[j]!=-1)
                {
                    int k=0;
                    int step=7;
                    while(step--)
                    {
                        if(pho[i][step]!=pho[j][step])
                        {
                            k=1;
                            break;
                         }
                    }
                    if(k==0)
                    {
                        flag[i]++;
                        flag[j]=-1;
                    }   
                }
            }
        }
    }

//  for(int i=0;i<group;i++)
//  {
////        cout<<flag[i]<<endl;
//  }

    for(int i=0;i<n;i++)
    {
        if(flag[i]!=-1&&flag[i]!=1)
        {
            for(int j=0;j<3;j++)
            {
                cout<<pho[i][j];
            }
            cout<<"-";
            for(int j=3;j<7;j++)
            {
                cout<<pho[i][j];
            }
            cout<<" "<<flag[i]<<endl;
        }
    }

    return 0;
}

C/C++数组初始化的一些误区:
https://blog.csdn.net/u014417133/article/details/77185009


电话号码排序:十进制大小:把字符串变成数字比较大小

猜你喜欢

转载自blog.csdn.net/lzydadong/article/details/82630084