【PTA] 7-8 纸牌排序 (10 分) c语言实现

#include <stdio.h>
#include <string.h>
#include <math.h>
void print (double n)
{
	int i = (n) ;
	double t = n-i;
	double eps = 1e-5;
	if (fabs(t-0.4)<=eps) printf ("spade");
	if (fabs(t-0.3)<=eps) printf ("heart");
	if (fabs(t-0.2)<=eps) printf ("club");
	if (fabs(t-0.1)<=eps) printf ("diamond");	
	printf (" %d",i);
}
int main ()
{
	int t;
	scanf ("%d",&t);
	getchar();
	char se[100];
	int di;
	while (t--) //t组数据 
	{	
		int i = 0 ;
		double sum [150]= {0.0};
		while (1)//读入的一组数据 
		{
			char flag;
			
			while (1)
			{
				scanf ("%c",&flag);
				if (flag==' ') scanf ("%c",&flag);
				if (flag=='\n') break;
				if (flag != ' ' && flag != '\n') break;		
			}
			if (flag=='\n') break;
			scanf ("%s %d",se,&di);
			if(!(strcmp(se,"pade"))) sum[i++] = di + 0.4;//设置区分度 
			if(!(strcmp(se,"eart"))) sum[i++] = di + 0.3;
			if(!(strcmp(se,"lub"))) sum[i++] = di + 0.2;
			if(!(strcmp(se,"iamond"))) sum[i++] = di + 0.1;
		}
		int j,t;
		double temp;
		for (j=1;j<i;j++) 
			for (t=i-1;t>=j;t--)//大到小 
			{
				if (sum[t]>sum[t-1])
				{
					temp = sum [t];
					sum[t] = sum[t-1];
					sum[t-1] = temp;
				}	
			}
		for (j=0;j<i;j++)
		{
			if (j) printf (" ");
			print (sum[j]);
			
		}
		printf ("\n");
	}
	return 0;
 } 

 这题的思路就是根据比重不同进行排序,很显然 相同点数的时候 ,牌色会影响次序,所以相对来说,牌色不是那么重要,因此把不同的的牌色赋予一个小数值,从而比较浮点数的大小即可。

有几个注意的点,一个是题目中彼此牌之间空格的数量是不确定的,二是double类型数的精确度是个范围 因此只能限制在一个小范围中

然后本题后面用的排序法为选择排序法。

11/27

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值