20分(就#1过了),求助!
查看原帖
20分(就#1过了),求助!
1314163
bu_chi_suan楼主2024/3/29 18:59
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct Value {
	int Gold_Weigh[101],Gold_Sum[101],Gold_Per[101];
	int number;
}Val;
int main()
{
	Val val;
	int N, T, t, k = 0;
	double Gold_Gained = 0;
	scanf("%d%d", &N, &T);
	for (int i = 0; i < N; i++)
	{
		scanf("%d%d", &val.Gold_Weigh[i], &val.Gold_Sum[i]);
		val.Gold_Per[i] = val.Gold_Sum[i] / val.Gold_Weigh[i];
		val.number = i;
	}
	for (int i = 0; i < N-1; i++)
	{
		for (int j = 0; j < N-1-i; j++)
		{
			if (val.Gold_Per[j] < val.Gold_Per[j + 1])
			{
				t = val.Gold_Per[j];
				val.Gold_Per[j] = val.Gold_Per[j + 1];
				val.Gold_Per[j + 1] = t;

				t = val.Gold_Weigh[j];
				val.Gold_Weigh[j] = val.Gold_Weigh[j + 1];
				val.Gold_Weigh[j + 1] = t;

				t = val.Gold_Sum[j];
				val.Gold_Sum[j] = val.Gold_Sum[j + 1];
				val.Gold_Sum[j + 1] = t;

				t = val.number;
				val.number = val.number;
				val.number = t;
			}
		}
	}
	while (T > 0)
	{
		if (T >= val.Gold_Weigh[k])
		{
			Gold_Gained += val.Gold_Sum[k];
			T -= val.Gold_Weigh[k];
			k++;
			if (k == N)
				break;
		}
		else
		{
			Gold_Gained += val.Gold_Per[k] * T;
			T = 0;
		}
	}
	printf("%.2lf", Gold_Gained);
	return 0;
}

也可以分享一下后面四个的样例,谢谢

2024/3/29 18:59
加载中...