1.列表嵌套一动物重量排序 [问题描述】输入一系列动物名和其重量,重量单位可能是kg,也可能是t,动物名,車量间空格分隔,重量数值与单位问无分隔。按重量由小到大排序以二維列表形式输出。 [输入形式了每次输入一个动物名,以及其重量和单位,动切名与重量间用空格分隔,输入-1时结束输入。 [输出形式】以一维列表形式输出,按重量由小到大升序排序。 〔样例输入】 海豚 228kg 北极熊 0.75t 企鹅 35kg 海豹 0.35t 白鲸 1.35t -1 【样例输出) 七企鸡,35kg1,「海豚,228kg1,【海豹,0.35t7,[北极熊: 0.75t1.r白鯨,1.35t71 【样例说明】 【评分标准】
时间: 2023-04-04 20:02:45 浏览: 351
我可以回答这个问题。根据输入的动物名和重量,需要将重量转换为同一单位,然后按重量升序排序并输出。以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ANIMALS 100
typedef struct {
char name[20];
double weight;
} Animal;
int compare(const void *a, const void *b) {
Animal *animalA = (Animal *)a;
Animal *animalB = (Animal *)b;
if (animalA->weight < animalB->weight) {
return -1;
} else if (animalA->weight > animalB->weight) {
return 1;
} else {
return 0;
}
}
int main() {
Animal animals[MAX_ANIMALS];
int numAnimals = 0;
char input[100];
printf("请输入动物名和重量(单位为kg或t),以空格分隔,输入-1结束:\n");
while (1) {
fgets(input, 100, stdin);
if (strcmp(input, "-1\n") == 0) {
break;
}
char *name = strtok(input, " ");
char *weightString = strtok(NULL, " ");
double weight = atof(weightString);
if (strstr(weightString, "t") != NULL) {
weight *= 1000;
}
Animal animal = {0};
strcpy(animal.name, name);
animal.weight = weight;
animals[numAnimals++] = animal;
}
qsort(animals, numAnimals, sizeof(Animal), compare);
printf("按重量升序排序后的动物列表:\n");
for (int i = 0; i < numAnimals; i++) {
printf("%s,%.2fkg\n", animals[i].name, animals[i].weight);
}
return 0;
}
```
注意,这个程序并没有考虑输入错误的情况,比如输入的重量不带单位或者单位不是kg或t。如果需要更严谨的输入检查,可以在程序中添加相应的代码。
阅读全文