HOJ1263 水果

    一道很简单的题目,太浮躁了。WA了很多次。

http://acm.hdu.edu.cn/showproblem.php?pid=1263

 

主要是用qsort和对结构体的处理不熟悉导致.

最后想了个比较2的办法 代码东改西改  很烂了。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct fruit
{
	char name[100];
	char place[100];
	int n;
};
int cmp(const void *a,const void *b);

main()
{
	int N,M,m,i,j;
 struct  fruit fit[101];

scanf("%d",&N);
	while(N--)
	{
		scanf("%d",&M);
		for(m=0;m<M;m++)
		{
			scanf("%s %s %d",fit[m].name,fit[m].place,&fit[m].n);
		}
		for(m=0;m<M;m++)
		{
			for(i=m+1;i<M;i++)
			{
				if((strcmp(fit[m].place,fit[i].place)==0)&&(strcmp(fit[m].name,fit[i].name)==0)&&fit[i].n>0&&fit[m].n>0)
				{
					fit[m].n+=fit[i].n;
					  fit[i].n=-1;
					  strcpy(fit[i].name,"\0");
					 strcpy(fit[i].place,"\0");
				}
			}
		}
	qsort(fit,M,sizeof(fit[0]),cmp);
		for(i=0;i<M;i++)
		{
			if(fit[i].n<0)
			continue;
			if(i==0)
			printf("%s\n",fit[i].place);
		    else
		    {
    			if((strcmp(fit[i].place,fit[i-1].place)!=0))
    				printf("%s\n",fit[i].place);
    		}
			printf("   |----%s(%d)\n",fit[i].name,fit[i].n);
			
		}
		if(N!=0)
		printf("\n");
	}
}

int cmp(const void *a,const void *b)
{
		if(strcmp((*(struct fruit *)a).place,(*(struct fruit *)b).place)>0)
	  return 1;
	if(strcmp((*(struct fruit *)a).place,(*(struct fruit *)b).place)==0)
	{
    if(strcmp((*( struct fruit *)a).name,(*(struct fruit *)b).name)>=0)
    return 1;
    else
    return -1;
	}
  else	
	return -1;
}


 

你可能感兴趣的:(HOJ1263 水果)