POJ 1002题 解题报告

来源:互联网 发布:java json转对象 编辑:程序博客网 时间:2024/04/29 02:10

这个是超时版的:

 

#include<iostream>
#include<string>
using namespace std;

typedef struct TelephoneNumber{//表示电话号码的结构体
 string number;//电话号码串
 int prefix;//首数字
 int count;//重复次数
}TelephoneNumber;

/*
#include<fstream>
fstream fin ("input.txt",ios::in);
#define cin fin
//*/

struct TelephoneNumber Transform(struct TelephoneNumber m)
{
 int i;
 for(i=0;m.number[i]=='-';)
  m.number.erase(i,1);
 for(i=m.number.length()-1;m.number[i]=='-';i--)
  m.number.erase(i,1);
 for(i=0;i<m.number.length();)//去掉连接符
  if(m.number[i]=='-')
   m.number.erase(i,1);
  else
   i++;
   
 for(i=0;i<7;i++)
 {
  switch(m.number[i])
  {
  case 'A':
  case 'B':
  case 'C':
  case '2': m.number[i]='2'; break;
  case 'D':
  case 'E':
  case 'F':
  case '3': m.number[i]='3'; break;
  case 'G':
  case 'H':
  case 'I':
  case '4': m.number[i]='4'; break;
  case 'J':
  case 'K':
  case 'L':
  case '5': m.number[i]='5'; break;
  case 'M':
  case 'N':
  case 'O':
  case '6': m.number[i]='6'; break;
  case 'P':
  case 'R':
  case 'S':
  case '7': m.number[i]='7'; break;
  case 'T':
  case 'U':
  case 'V':
  case '8': m.number[i]='8'; break;
  case 'W':
  case 'X':
  case 'Y':
  case '9': m.number[i]='9'; break;
  }
 }
 m.number.insert((string::size_type)3,1,'-');//加上连接符
 m.prefix=m.number[0]-'0';//给其首数字字段赋值
 return m;
}

int main()
{
 int i,j,T,flag=0;
 struct TelephoneNumber m;
 cin>>T;
 struct TelephoneNumber *resultSet=new struct TelephoneNumber[T];//号码集

 for(i=0;i<T;i++)
 {
  cin>>m.number;
  resultSet[i]=Transform(m);
  //cout<<resultSet[i].number<<" "<<resultSet[i].prefix<<endl;
 }
 
 for(i=0;i<T;i++)
 {
  resultSet[i].count=1;//初始化结构体中用于统计重复次数的count
  if(resultSet[i].number=="")//跳过已搜索过的串
   continue;
  else
  {
   for(j=i+1;j<T;j++)
    if(resultSet[i].number==resultSet[j].number)
    {
     resultSet[j].number="";//相同的只保留一个,其余的都清空,以后就不用重复搜索了
     resultSet[i].count++;
    }
  }
 }
 for(i=0;i<=9;i++)
  for(j=0;j<T;j++)
   if(resultSet[j].count>1 && resultSet[j].prefix==i)//被清空的串的count值一定是1
   {
    flag=1;
    cout<<resultSet[j].number<<" "<<resultSet[j].count<<endl;
   }
 if(!flag)
  cout<<"No duplicates."<<endl;

 return 0;
}