Auteur du groupe de cours de programmation usx
Unité Université des Arts et des Sciences de Shaoxing
Il s'agit d'une version simplifiée du problème des courses de chevaux de Tian Ji. Les détails sont les suivants :
Tian Ji et le roi de Qi participent à des courses de chevaux. Les deux camps comptent n chevaux participants. La mise pour chaque jeu est de 200 taels d'or. On sait maintenant que la vitesse de chaque cheval du roi Qi et du Tian Ji est connue, et le roi Qi doit jouer en fonction de la vitesse du cheval, de rapide à lent. Veuillez écrire un programme pour aider Tian Ji à calculer combien de taels d'or il peut gagner au maximum (s'il perd, cela sera exprimé sous forme de nombre négatif).
Par souci de simplicité, assurez-vous que les vitesses des 2n chevaux sont différentes.
Format d'entrée :
Entrez d'abord un entier positif T, indiquant le nombre de groupes de données de test, puis T groupes de données de test.
Chaque ensemble de données de test contient 3 lignes. La première ligne est n (1≤n≤100), indiquant le nombre de chevaux participants des deux côtés. La deuxième ligne est n entiers positifs, indiquant le nombre de chevaux de Tian Ji. La vitesse, n entiers positifs dans la ligne 3, représente la vitesse du cheval du roi Qi.
Format de sortie:
Pour chaque ensemble de données de test, affichez une ligne contenant un nombre entier, indiquant combien de taels d'or Tian Ji peut gagner au maximum.
Exemple de saisie :
4
3
92 83 71
95 87 74
2
20 25
21 12
10
1 2 3 24 5 6 7 8 9 12
11 13 15 19 22 34 14 21 44 99
4
10 15 16 37
14 20 30 40
Échantillon de sortie :
200
400
-1200
0
Le code du langage C s'analyse comme suit
#include <stdio.h>
int main() {
int t;
scanf("%d", &t);
for (int i = 0; i < t; i++) {
int n;
scanf("%d", &n);//接收个数
int tian[n], qi[n];
for (int j = 0; j < n; j++) {
scanf("%d", &tian[j]);//接收tianji马的速度
}
for (int j = 0; j < n; j++) {
scanf("%d", &qi[j]);//接收qi马的速度
}
//对这两组数据同时进行排序
for (int j = 0; j < n - 1; j++) {
for (int k = 0; k < n - j - 1; k++) {
if (tian[k] > tian[k + 1]) {
// 交换tian[k]和tian[k+1]
int temp = tian[k];
tian[k] = tian[k + 1];
tian[k + 1] = temp;
}
if (qi[k] > qi[k + 1]) {
// 交换qi[k]和qi[k+1]
int temp = qi[k];
qi[k] = qi[k + 1];
qi[k + 1] = temp;
}
}
}
//开始遍历
int x = 0;
int y = 0;
int count = 0;
for (x = 0; x < n; x++) {
for (y = 0; y < n;) {
if (tian[y] > qi[x]) {
y += 1;
count += 1;
break;
} else {
y += 1;
}
}
if (y == n) {
break; // 田忌所有的马都不能赢
}
}
printf("%d\n", count * 200 - (n - count) * 200);
}
return 0;
}
L'analyse du code python est la suivante
t = int(input())
for i in range(t):
n = int(input())
tian = list(map(int, input().split())) # 田忌马的速度
qi = list(map(int, input().split())) # 齐王马的速度
tian.sort()
qi.sort()
x = 0
y = 0
count = 0
for x in range(n):
for y in range(n): # 找到田忌比齐王最弱的马强的下标,齐马增加,田的马从y开始
if tian[y] > qi[x]:
y += 1
count += 1
break
else:
y += 1
if y == n:
break # 田忌所有的马都不能赢
print(count*200 - (n-count)*200)