田忌赛马
大致意思:
田忌与齐王赛马,每回合输者给赢者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);
}
}