北大ACM第1002号的解答问题!!50分求教

实在不知道自己哪里错了……郁闷……#include<stdio.h>#include<stdlib.h>#include<string.h>long_10_pow(int... 实在不知道自己哪里错了……郁闷……
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
long _10_pow(int x)
{
int i;
long result=1;
for (i =0;i<x;++i)result *= 10;
return(result);
}
long transfer( char *str , int len )
{
int i,j = 0;
long tmp = 0;
for ( i = len ; i + 1 ; --i )
{
if (str[i] == '-')continue;
else
{
if (str[i] <= '9')tmp += (str[i] - '0') * _10_pow(j);
else if (str[i] < 'Q') tmp += ((str[i] - 'A') / 3 + 2) * _10_pow(j);
else tmp += ((str[i] - 'A' -1) / 3 + 2) * _10_pow(j);
++j;
}
}
return tmp;
}
int BubbleSort(long *Record,int amt)//amt = 4
{
int wall,i;
long tmp;
for (wall = 0 ; wall != amt ; ++wall)
{
for (i = amt - 1 ; i > wall ; --i )
{
if (Record[i - 1] > Record[i])
{
tmp = Record[i - 1];
Record[i - 1] = Record[i];
Record[i] = tmp;
}
}
}
return 0;
}

int print( char *str ,int rep_count,int strlen)
{
int i;
if (strlen == 7)
{
for ( i = 0 ; i <= 2 ; ++i)
{
putchar(str[i]);
}
putchar('-');
for (; i < 7 ; ++ i)
{
putchar(str[i]);
}
printf(" %d\n",rep_count);
}
else if (strlen <= 4)
{
printf("000-");
for (i = 0 ; i < 4 - strlen ; ++i)
putchar('0');
printf("%s %d\n",str,rep_count);
}
else
{
for (i = 0 ; i < 7 - strlen ; ++i)
putchar('0');
for (i = 0 ; i < strlen - 4 ; ++i)
{
putchar(str[i]);
}
putchar('-');
for (; i < strlen ; ++ i)
{
putchar(str[i]);
}
printf(" %d\n",rep_count);
}
return 0;
}
int main()
{
int i,j,amt;
char buf[20];
scanf("%d",&amt);
long *rec = (long *) malloc ((amt + 1) * sizeof( long ) );
rec[amt + 1] = -1;
for ( i = 0 ; i < amt ; ++ i)
{
scanf("%s",buf);
rec[i] = transfer( buf , strlen(buf) - 1 );
}//已将所有输入转换为long数字
BubbleSort(rec,amt);
int count = 0,rep_count = 0;
for ( i = 0 ; i < amt - 1 ;)
{
for ( j = i + 1 ; j <= amt ; ++j)
if (rec[i] != rec[j])break;
rep_count = j - i;
if (rep_count - 1)
{
itoa(rec[i],buf,10);
print(buf,rep_count,strlen(buf));
count++;
}
i = j;
rep_count = 0;
}
if (!count)puts("No duplicates.");
return 0;
}
展开
 我来答
陶梓絮
推荐于2016-11-11 · TA获得超过2006个赞
知道小有建树答主
回答量:615
采纳率:0%
帮助的人:868万
展开全部
#include<iostream>
#include<cstring>
using namespace std;
long n,i;
int j;
char a[100005][10];
char ch[300];

int qsort(long l,long r)
{
long i,j;
char x[10],y[10];
memset(x,0,sizeof(x));
i=l,j=r;strcpy(x,a[(int)((l+r)/2)]);
do{
while (strcmp(a[i],x)<0) {i++;}
while (strcmp(x,a[j])<0) {j--;}
if (!(i>j))
{
memset(y,0,sizeof(y));
strcpy(y,a[i]);
memset(a[i],0,sizeof(a[i]));
strcpy(a[i],a[j]);
memset(a[j],0,sizeof(a[j]));
strcpy(a[j],y);
i++,j--;
}
}
while (i<=j);
if (l<j) qsort(l,j);
if (i<r) qsort(i,r);
}

int main()
{
freopen("1002.in","r",stdin);
freopen("1002.out","w",stdout);
scanf("%Ld",&n);
memset(a,0,sizeof(a));
for (i=1;i<=n;i++)
{
memset(ch,0,sizeof(ch));
scanf("%s",ch);
int w=-1;
for (j=0;j<strlen(ch);j++)
{
switch(ch[j])
{
case '0': a[i][++w]='0';break;
case '1': a[i][++w]='1';break;
case 'A':case'B':case'C':case'2':a[i][++w]='2';break;
case 'D':case'E':case'F':case'3':a[i][++w]='3';break;
case 'G':case'H':case'I':case'4':a[i][++w]='4';break;
case 'J':case'K':case'L':case'5':a[i][++w]='5';break;
case 'M':case'N':case'O':case'6':a[i][++w]='6';break;
case 'P':case'R':case'S':case'7':a[i][++w]='7';break;
case 'T':case'U':case'V':case'8':a[i][++w]='8';break;
case 'W':case'X':case'Y':case'9':a[i][++w]='9';break;
case 'Q': a[i][++w]='Q';break;
case 'Z': a[i][++w]='Z';break;
}
}
}
bool f=true;
qsort(1,n);
i=0;
while (i<n)
{
i++;j=0;
while (strcmp(a[i+1],a[i])==0) {j++;i++;f=false;}
if (j>0){printf("%c%c%c-%c%c%c%c %Id\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4],a[i][5],a[i][6],j+1);}
}
if (f) printf("No duplicates.\n");
return 0;
}

我的标程
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式