2021-09-07 简单田忌赛马

  • Post author:
  • Post category:其他


题目:

这是一个简版田忌赛马问题,具体如下: 田忌与齐王赛马,双方各有n匹马参赛,每场比赛赌注为200两黄金,现已知齐王与田忌的每匹马的速度,并且齐王肯定是按马的速度从快到慢出场,请写一个程序帮助田忌计算他最多赢多少两黄金(若输,则用负数表示)。 简单起见,保证2n匹马的速度均不相同。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 每组测试数据输入3行,第一行是n(1≤n≤100) ,表示双方参赛马的数量,第2行n个正整数,表示田忌的马的速度,第3行n个正整数,表示齐王的马的速度。

输出格式:

对于每组测试数据,输出一行,包含一个整数,表示田忌最多赢多少两黄金。

输入样例:

1
3
92 83 71
95 87 74

输出样例:

200

出错原因:

我不知道哪里有错,明明我的测试用例通过了,请诸位dalao帮我找找

提交报错:

代码:

#include<iostream>

#include<algorithm>

#define MAX 100

using namespace std;

int m;

int n;//两人各有n匹马

int tian[MAX],qi[MAX];

int main()

{


cin>>m;

cin>>n;

for(int a=0;a<m;a++)

{


//读入数据

for(int i=0; i<n; i++)

{


cin >> tian[i];

}

for(int i=0; i<n; i++)

{


cin>>qi[i];

}

//排序

sort(tian, tian+n);

sort(qi, qi+n);

int i = 0, j = 0;

int k1 = n-1, k2 = n-1;

int num = 0;//马的数量

int money = 0;//获得的钱

while(num < n)

{


if(tian[k1] > qi[k2])

{


money += 200;

k1–;

k2–;

num++;

continue;

}

if(tian[k1] < qi[k2])

{


money -= 200;

i++;

k2–;

num++;

continue;

}

if(tian[k1] == qi[k2])

{


if(tian[i]>qi[j])

{


money += 200;

i++;

j++;

num++;

continue;

}

else{


if(tian[i]<qi[k2])

{money -= 200;}

i++;

k2–;

num++;

continue;

}

}

}

cout<<money;

}

return 0;

}

现在已改正,

发现应将测试数据及其数量输入端口写在判别循环里

改正后代码:

#include<iostream>

#include<algorithm>

#define MAX 100

using namespace std;

int m;

int n;//两人各有n匹马

int tian[MAX],qi[MAX];

int main()

{


cin>>m;

for(int a=0; a<m; a++)

{


cin>>n;

//读入数据

for(int i=0; i<n; i++)

{


cin >> tian[i];

}

for(int i=0; i<n; i++)

{


cin >> qi[i];

}

//排序

sort(tian, tian+n);

sort(qi, qi+n);

int i=0, j=0;

int k1 = n-1, k2 = n-1;

int num = 0;//马的数量

int money = 0;//获得的钱

while(num < n)

{


if(tian[k1] > qi[k2])

{


money += 200;

k1–;

k2–;

num++;

continue;

}

if(tian[k1] < qi[k2])

{


money -= 200;

i++;

k2–;

num++;

continue;

}

if(tian[k1] == qi[k2])

{


if(tian[i]>qi[j])

{


money += 200;

i++;

j++;

num++;

continue;

}

else{


if(tian[i]<qi[k2])

{money -= 200;}

i++;

k2–;

num++;

continue;

}

}

}

cout<<money;

printf(“\n”);

}

return 0;

}

这是我的审题问题与答案理解问题



版权声明:本文为Wangliyuu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。