思路:对输入的马进行排序,先比较田忌最快的和齐王最快的,然后比较田忌最慢的和齐王最慢的;如果前两者都赢不了,则用田忌最慢的消耗掉齐王最快的。
代码如下:
#include<bits/stdc++.h>
using namespace std;
void SelectSort(int* a, int len)
{
for (int i = 0; i < len; i++)
{
int temp = a[i];
int min = i;
for (int j = i+1; j < len; j++)
{
if (a[j] < temp)//由小到大排序
{
min = j;
temp = a[j];
}
}
if (min != i)
{
swap(a[i], a[min]);
}
}
}
int main(){
int n,fa,fb,la,lb,cnt;
int a[1000],b[1000];
while(cin>>n&&n!=0){
for(int i=0;i<n;i++){
cin>>a[i];
}//读入田忌的马
for(int i=0;i<n;i++){
cin>>b[i];
}//读入齐王的马
SelectSort(a,n);
SelectSort(b,n);
fa=n-1;
la=0;
fb=n-1;
lb=0;
cnt=0;
for(int i=0;i<n;i++){
if(a[fa]>b[fb]){//田忌最快的马比齐王最快的马快
cnt++;
fa--;
fb--;
}else if(a[la]>b[lb]){//此时田忌最快的马已经比齐王最快的马慢
cnt++;
la++;
lb++;
}else{//此时田忌最快的马比齐王最快的马慢,田忌最慢的比齐王最慢的慢
if(a[la]<b[fb]){
cnt--;
fb--;
la++;
}
}
}
cout<<cnt*200<<endl;
}
return 0;
}
遇到的问题:
一开始存入数组时是从1存到n,排序算法还是从0排序到n-1,不匹配,出错。