| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:1002总结In Reply To:1002总结 Posted by:Thrush at 2010-07-26 23:46:56
> int num(char *tel)
> {
> int i;
> int n=0;
>
> for ( i=0; i<strlen(tel); i++ )
> if ( tel[i]>='0' && tel[i]<='9' )
> n = n * 10 + ( tel[i] - 48 );
> return n;
> }
>
> void toTel( int num, char *tel )
> {
> int index;
>
> memset( tel, '0', 8 );
> tel[8] = '\0';
> tel[3] = '-';
> index = 7;
> while ( num ) {
> if ( index == 3 ) index--;
> tel[index--] = num % 10 + 48;
> num /= 10;
> }
> }
上面两个转换小函数不错。
> int main()
> {
> int i;
> int n;
> char tel[500];
> char real_tel[9];
> int index;
> int flag;
>
> scanf("%d",&n);
> for ( i=0; i<n; i++ ){
> scanf("%s",tel);
> convert(tel,real_tel);
> index = num(real_tel);
> record_times[index] ++;
够bt,用这个做数组下标。然后用元素表示重复次数。
sizeof(int) * 10000000 ~= 40000KB, 再加上程序堆栈,逼近了限制。
幸好电话号码是7位而不是8位,也没有加区号。
> }
> flag = 0;
> for ( i=0; i<10000000; i++ )
> if ( record_times[i] > 1 ){
> toTel(i,tel);
> printf("%s %d\n",tel,record_times[i]-0);
> flag = 1;
> }
> if ( flag == 0 )
> printf("No duplicates.\n");
>
> return 0;
> }
>
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator