题目:(是一道应用题,大致题意如下)
给定一个整数N(1<=N<=100),表示工人个数
一定数量的水果种类,每一个工人都有搬运水果的能力,给定列表,输出每一类水果工人搬运量,从大往小排列,同等搬运能力的输出工号小的工人
输入:
5
Apple 2 30
Apple 3 40
Apple 1 45
Apple 5 25
Orange 4 30
Orange 3 20
Orange 1 20
Apple 4 50
Orange 5 40
输出
Apple 4 50
Apple 1 45
Apple 3 40
Apple 2 30
Apple 5 25
Orange 5 40
Orange 4 30
Orange 1 20
Orange 3 20
笨法解----c语言
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define fnum 20 //水果种类
struct s
{
char f[32];
int w[100]; //最多100个工人
};
void print_sort(struct s *fp, int people)
{
int i,j;
//find_max(&fp->w[1], people);//工人编号从1开始,找到最大的重量,返回index
for (i = 0; i < people; i++)
{
int idx = 1, weight = fp->w[1];
for(j = 1; j < people+1; j++)//工人编号从1开始,找到最大的重量,返回index
{
if(weight < fp->w[j])
{
idx = j;
weight = fp->w[j];
}
}
if(fp->w[idx] != 0)
{
printf("%s", fp->f);
printf(" %d %d\n", idx, weight);
fp->w[idx] = 0;
}
}
}
int main()
{
int people = 0;
scanf("%d", &people);
struct s fw[fnum] = {0};
char fruit[32] = {0};
int w, no, i;
int ffnum = 0;
while (scanf("%s %d %d", fruit, &no, &w) != EOF && w != 0)
{
for (i = 0; i < fnum; i++)
{
if (fw[i].f[0] == '\0')
{
ffnum++;//输入水果的种类
strcpy(fw[i].f, fruit);
fw[i].w[no] = w;
break;
}
else
{
if (strcmp(fruit, fw[i].f) == 0)
{
fw[i].w[no] = w;
break;
}
}
}
}
for (i = 0; i < ffnum; i++)
{
print_sort(&fw[i], people);
}
return 0;
}