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 }

你可能感兴趣的:(ACM)