C语言例题:田忌赛马
2026/6/1 8:00:24 网站建设 项目流程

题目描述
中国古代的历史故事“田忌赛马”是为大家所熟知的。话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱?

输入格式
第一行为一个正整数n (n < = 1000) ,表示双方马的数量。 第二行有N个整数表示田忌的马的速度。 第三行的N个整数为齐王的马的速度。

输出格式
仅有一行,为田忌赛马可能赢得的最多的钱,结果有可能为负。

输入样例
3
92 83 71
95 87 74

输出样例

200

以下是我的代码:

#include <stdio.h> #include <math.h> //引入函数使用冒泡排序法将马的数量从慢到快排序 void pai(int a[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (a[j] > a[j + 1]) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } } int main() { int n; scanf("%d", &n); int t[10001]; int q[10001]; for (int i = 0; i < n; i++) { scanf("%d", &t[i]); } pai(t, n); for (int i = 0; i < n; i++) { scanf("%d", &q[i]); } pai(q, n); int tslow = 0;//田忌最慢马的索引 int qslow = 0;//齐王最慢马的索引 int tfast = n-1;//田忌最快马的索引 int qfast = n-1;//齐王最快马的索引 int s = 0; for (int i = 0; i < n; i++) { //先将田忌最快的马和齐王最快的马比 if (t[tfast] > q[qfast]) { s += 200; tfast--; qfast--; } //快马比不过就看田忌慢马是否大于齐王慢马 else if (t[tslow] > q[qslow]) { s += 200; tslow++; qslow++; } //如果都比不过就用田忌最慢的马去和齐王最快的马去比 else if (t[tslow] < q[qfast]) { s -= 200; tslow++; qfast--; } //处理平局 else { tslow++; qfast--; } } printf("%d",s); return 0; }

用这种方法能最终得出使田忌赢得最多或者亏的最少的情况 。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询