uva 755 (487--3279)排序

这是一简单的排序,之所以把这道题放上面呢,是因为我在这道题上实在wa太多了,wa了7次,中间找出来

个错误,就是在倒数第一个和倒数第二个相等的情况下我没有输出他们的个数,改正后还是wa,最后我发现原来是每组

数据之间输出一个空行。。。。。坑了我好久,一直以为是每组后面都有空行。。。

放代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//char a[100005];
char a[100005][1000];
char b[100005][1000];
int cmp(const void *a,const void *b)
{
	return strcmp((char *)a,(char *)b);
}
int main() 
{
	int n,t,i,j,lena,k;
	scanf("%d",&t);
	
	while(t--)
	{
		memset(a,'\0',sizeof(a));
		memset(b,'\0',sizeof(b));
		scanf("%d",&n);
		for(k=0; k<n; k++)
		{
			scanf("%s",a[k]);
			lena = strlen(a[k]);
			j=0;
			for(i=0;i<lena; i++)
			{
				if(a[k][i]!='-')
				{
					if(a[k][i]>='A'&&a[k][i]<='Z')
					{
					switch (a[k][i])
					{
						case 'A':
						case 'B':
						case 'C':b[k][j++]='2';break;
						case 'D':
						case 'E':
						case 'F':b[k][j++]='3'; break;
						case 'G':
						case 'H':
						case 'I':b[k][j++]='4'; break;
						case 'J':
						case 'K':
						case 'L':b[k][j++]='5'; break;
						case 'M':
						case 'N':
						case 'O':b[k][j++]='6'; break;
						case 'P':
						case 'R':
						case 'S':b[k][j++]='7'; break;
						case 'T':
						case 'U':
						case 'V':b[k][j++]='8'; break;
						case 'W':
						case 'X':
						case 'Y':b[k][j++]='9'; break;
					}
				    }
				    else
				    	b[k][j++]=a[k][i];
				}
				
			}
			b[k][j]='\0';
		//	puts("###################");-
			//printf("%s\n",b[k]);
		}
		qsort(b,n,sizeof(b[0]),cmp);
		//puts("**********************");
	//	for(i=0; i<n; i++)
		//	puts(b[i]);
		int sum=1;
		int flag=0;
		int FLAG=0;
		for(k=0; k<n-1; k++)
		{
		//	puts(b[k]);
			if(!strcmp(b[k],b[k+1]))
			{
				sum++;
				flag=1;
				if(sum==2)
				{
					for(j=0; b[k][j]!='\0'; j++)
					{
						printf("%c",b[k][j]);
						if(j==2)
							printf("-");
					}
					FLAG=1;
				}
				if(k+1==n-1)
					printf(" %d\n",sum);
					//printf("%s ",b[k]);
			}
			else
			{
				if(flag)
				{
				 	printf(" %d\n",sum);
				 	sum=1;
				}
				flag=0;
			}
		}
		if(FLAG==0)
			puts("No duplicates.");
		if(t!=0)
			puts("");
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值