【hdoj1052】Tian Ji -- The Horse Racing(贪心)

该博客介绍了如何利用贪心算法解决田忌赛马问题,以最大化田忌赢得的比赛和银元。通过比较田忌和齐王马的速度,确定最优比赛策略,包括直接比、田忌最慢对齐王最快以及特殊情况的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                              田忌赛马

大致意思:

田忌与齐王赛马,每回合输者给赢者200银元,试编出程序,使田忌赢的钱尽可能多。

输入:

每组数的第一行为比赛的马的个数(<=100)第二行为田忌的马的速度,第三行为齐王的马的速度。

输出:

田忌赢得的钱数

 

思路:

1、田忌的当前最快的马(速度)>齐王当前最快的马:

   直接比,能赢干嘛不赢呀。

2、田忌的当前最快的马<齐王当前最快的马:

   田忌最慢的马跟齐王最快的马。

3、田忌的当前最快的马=齐王当前最快的马:

      1 田忌当前最慢的马>齐王当前最慢的马:

                两个最慢的马比。

     2田忌当前最慢的马<齐王当前最慢的马:

                用田忌最慢的马跟齐王最快的马比。

     3田忌当前最慢的马=齐王当前最慢的马:

                1 、田忌当前最慢马=齐王当前最快马:

                      说明他们剩下的等数量的马都一样快,退出循环。

               2、  否则用田忌的慢马与齐王的快马比。

<程序中的if else 就是按这个顺序来的:)>


——————————————————————欢迎高人指正我不足的地方,欢迎各位同僚咱一起讨论————————————

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

int a[1001]={0};//田忌的马
int b[1001]={0};//齐王的马

int comparator(const void *elem1,const void *elem2)
{
    return *(int *)elem2-*(int *)elem1;
}

void main()
{
   int n,th,ts,qh,qs,win;//th:田的快马,即序列头指针ts:田的慢马即序列尾指针,另外两个为齐的
   while(scanf("%d",&n)&&n)
   {
      for(int i=0;i<n;i++)
		  scanf("%d",&a[i]);
	  for(i=0;i<n;i++)
		  scanf("%d",&b[i]);
	  qsort(a,n,sizeof(int),comparator);
	  qsort(b,n,sizeof(int),comparator);//快排
	  th=qh=win=0;
	  ts=qs=n-1;
	  while(th<=ts)//当田所有的马遍历一遍时,退出循环。
	  {
		  if(a[th]>b[qh])
		  {
		      th++;
			  qh++;
			  win++;
		  }
		  else if(a[th]<b[qh])
		  {
		      ts--;
			  qh++;
			  win--;
		  }
		  else
		  {
			  if(a[ts]>b[qs])
			  {
			      ts--;
				  qs--;
				  win++;
			  }
			  else if(a[ts]<b[qs])
			  {
			      ts--;
				  qh++;
				  win--;
			  }
			  else
			  {
			     if(a[th]==b[qs])
					 break;
				 else
				 {
				    ts--;
					qh++;
					win--;
				 }
			  }
		  }//else
	  }//while
	  printf("%d\n",win*200);
   }
   
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值