ACM1002题

这个程序我在自己的电脑上运行正常,但是在PKU的网站上提交后结果就是编译错误。

估计是那个编译器的版本太老了吧。

我对这个代码的满意率为70%-80%,有些地方还是处理得不太好,但是正常工作。
干掉了几个非常要命的bug,现在可以正常工作了。
北大ACM的编译器版本貌似有点老了,我在DEV和CodeBlocks下编译运行都没问题。
能够正常完成样例输入输出,而且满足要求。

  1 #include <iostream>
  2 #include <cstdlib>
  3 using namespace std;
  4 class Tele
  5 {
  6     private:
  7             string *number;
  8             int *ArrayCount;
  9             int presize;
 10             void sort();
 11             void _delete(string &num,int position);
 12             void movf(int position);
 13             void convert(char & num);
 14     public:
 15             Tele();
 16             void Getsize();
 17             void GetNum();
 18             void deal();
 19             void show();
 20             ~Tele();
 21 };
 22 Tele::Tele()
 23 {
 24     number=NULL;
 25     presize=0;
 26 }
 27 void Tele::Getsize()
 28 {
 29     cin>>presize;
 30     number= new string [presize+1];
 31     if(number==NULL)
 32         abort();
 33     number[presize]="\0";
 34     /*******************Part 2************************/
 35     ArrayCount = new int [presize];//used for count
 36     if(ArrayCount==NULL)
 37         abort();
 38     for(int i=0;i<presize;i++)
 39         ArrayCount[i]=0;
 40 }
 41 void Tele::GetNum()
 42 {
 43     int psize=presize;
 44     while(psize--)
 45     cin>>number[psize];
 46 }
 47 void Tele::deal()
 48 {
 49     for(int i=0;i<presize;i++)
 50         for(int j=0;j<number[i].length();j++)
 51             convert(number[i][j]);
 52 /************************Part 2*************************/
 53     for(int i=0;i<presize;i++)
 54     {
 55         if(number[i][number[i].length()-1]=='-')
 56         {
 57             number[i][number[i].length()-1]='\0';
 58             number[i].resize(number[i].length()-1);
 59         }
 60         for(int j=0;j<number[i].length()-1;j++)
 61             if(number[i][j]=='-')
 62             {
 63                 _delete(number[i],j);
 64                 number[i].resize(number[i].length()-1);
 65                 j--;
 66             }
 67     }
 68     sort();
 69     for(int i=0;i<presize;i++)
 70     {
 71         number[i].insert(3,"-");
 72     }
 73 }
 74 void Tele::sort()
 75 {
 76     int counter=presize;
 77     for(int i=0;i<counter-1;i++)
 78     for(int j=0;j<counter-i-1;j++)
 79         if(number[j].compare(number[j+1])+1)
 80             number[j].swap(number[j+1]);
 81 /***********************Part 2***********************/
 82     for(int i=0;i<counter;i++)//kill the bug
 83     {
 84         if(counter>1)
 85         while(!number[i].compare(number[i+1])&&i<counter)//
 86         {
 87             movf(i);
 88             counter--;
 89             ArrayCount[i]++;
 90         }
 91     }
 92     presize=counter;//update the size
 93 /***********************Part 3***********************/
 94 }
 95 void Tele::show()
 96 {
 97     //cout<<"******************Start Line*****************\n";
 98     bool flag=0;
 99     for(int i=0;i<presize;i++)
100         if(ArrayCount[i]!=0)
101         {
102             cout<<number[i]<<ends<<ArrayCount[i]+1<<endl;
103             flag=1;
104         }
105         else if(flag==0)
106         cout<<"No duplicates";
107     //cout<<"******************End Line*****************\n";
108 }
109 void Tele::movf(int position)
110 {
111     for(int i=position;i<presize;i++)//Right!!!
112         number[i]=number[i+1];
113 }
114 void Tele::_delete(string &num,int position)
115 {
116     for(int i=position;i<num.length();i++)
117         num[i]=num[i+1];
118 }
119 void Tele::convert(char & num)
120 {
121     char valtemp=num;
122     if(num>='A'&&num<='Z')
123         (num-='A')/=3;
124     else
125         return;
126     if(num>=0&&num<=4)
127         switch(num)
128         {
129             case 0:num='2';return;
130             case 1:num='3';return;
131             case 2:num='4';return;
132             case 3:num='5';return;
133             case 4:num='6';return;
134         }
135     num=valtemp;
136     if(num<='S'&&num!='Q')
137         num='7';
138     else if(num<='V'&&num!='Q')
139         num='8';
140     else if(num<'Z'&&num!='Q')
141         num='9';
142 
143 
144 }
145 Tele::~Tele()
146 {
147     delete [] number;
148     delete [] ArrayCount;
149 }
150 
151 
152 int main()
153 {
154     //cout << "Hello world!" << endl;
155 
156 
157     Tele temp1;
158     temp1.Getsize();
159     temp1.GetNum();
160     temp1.deal();
161     temp1.show();
162     return 0;
163 }

转载于:https://www.cnblogs.com/matrix-r/archive/2012/11/10/2764498.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值