7-8 报销

年底,报销都挤在一堆,财务忙得不可开交。每个报销表包括姓名,各项费用的金额。对于每个报销单,这里规定按如下要求处理:

  • 金额高的优先处理;
  • 若金额相等时,则姓名字典序小的优先处理;
  • 若金额和姓名都相等,则按报销单来得早的优先处理。

请帮财务排好报销单的处理顺序。

输入格式:

首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。对于每组测试数据,先输入2个正整数n、m(1≤n≤20,1≤m≤10),然后是n行输入,第i行先输入第i个报销单上的姓名(长度不超过10个字符,且只包含大小写英文字母),然后再输入m个整数,表示第i个报销单上的各项费用,数据之间都以一个空格分隔,第i行输入的编号为i,编号越小表示来得越早。

输出格式:

对于每组测试,输出n+1行,第一行是“Case k:”,其中k表示是第k组测试;对于后面的n行,每行包含一个按规定要求排好序之后的报销单信息,包括:费用排名(从1开始,若费用相同,则排名也相同,否则排名为排序后的序号)、原编号、姓名、总费用,每两个数据之间留一个空格。每两组测试数据之间留一个空行。

输入样例:

2
4 5
Tom 100 900 200 100 700
Jack 1000 400 500 50 50
Sara 700 100 200 1000 300
Iris 100 900 200 100 600
3 2
Tom 2600 400
Jack 3800 800
Mary 3100 100

输出样例:

Case 1:
1 3 Sara 2300
2 2 Jack 2000
2 1 Tom 2000
4 4 Iris 1900

Case 2:
1 2 Jack 4600
2 3 Mary 3200
3 1 Tom 3000

个人思路:

 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
struct MyStruct
{
    int no;
	char name[100];
	int sum;
};
int cmp(const void* p1, const void* p2)
{
	if (((struct MyStruct*)p1)->sum != ((struct MyStruct*)p2)->sum)
	{
		return ((struct MyStruct*)p2)->sum - ((struct MyStruct*)p1)->sum;
	}
	else
	{
		return strcmp(((struct MyStruct*)p1)->name, ((struct MyStruct*)p2)->name);

	}

}
int main()
{
	int n;
	scanf("%d", &n);

 int No=0;
	while (n--)
	{
        int count=1;
		int x, y;
		int sum = 0;
		scanf("%d %d", &x, &y);
		int t = x;
		struct MyStruct arr[t];
		for (int i = 0; i < x; i++)
		{
			sum = 0;
            arr[i].no=i+1;
			scanf("%s", arr[i].name);
			int a;
			for (int j = 0; j < y; j++)
			{
				scanf("%d", &a);
				sum = sum + a;
			}
			arr[i].sum = sum;
		}

		qsort(arr, t, sizeof(arr[0]), cmp);
        No++;
        printf("Case %d:\n",No);
        
		for (int k = 0; k < t; k++)
		{
            if(arr[k].sum!=arr[k-1].sum)
            {
                count=k+1;
            }
			printf("%d %d %s %d\n",count, arr[k].no,arr[k].name, arr[k].sum);
		}
        if(n!=0)
        {

            printf("\n");
        }
	}

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值