【C语言】输入 a, b, c 三个数,并输出三者中的最大值

题目描述

编写一个程序,输入 a, b, c 三个数,并输出三者中的最大值。

输入格式

三个整数,分别为 a,b,c。
−100<a,b,c<100

输出格式

输出 a,b,c 三个数中最大的数。

样例输入

10 20 30

样例输出

30

代码如下

#include <stdio.h>

int main()
{
	int a,b,c;
	scanf("%d %d %d", &a, &b, &c);

	int max = 0;

	if ( a>b ) {
		if ( a>c ) {
			max = a;
		} else {
			max = c;
		}
	} else {
		if ( b>c ) {
			max = b;
		} else {
			max = c;
		}
	}

	printf("%d", max);

	return 0;
}

以下是用 C 语言解决该问题的代码: ```c #include <stdio.h> #include <stdlib.h> // 定义作业结构体 typedef struct { int id; // 作业编号 int d; // 截止期限 int p; // 效益 } Job; // 定义比较函,用于排序 int cmp(const void *a, const void *b) { Job *job1 = (Job *)a; Job *job2 = (Job *)b; return job2->p - job1->p; } int main() { // 读入作业 int n; Job jobs[200]; scanf("%d", &n); for (int i = 0; i < n; i++) { jobs[i].id = i + 1; scanf("%d%d", &jobs[i].d, &jobs[i].p); } // 按效益降序排序 qsort(jobs, n, sizeof(Job), cmp); // 使用集合树算法计算最优解 int max_profit = 0; int time_slots[200] = {0}; for (int i = 0; i < n; i++) { for (int j = jobs[i].d - 1; j >= 0; j--) { if (time_slots[j] == 0) { time_slots[j] = jobs[i].id; max_profit += jobs[i].p; break; } } } // 输出结果 printf("%d\n", max_profit); for (int i = 0; i < n; i++) { if (time_slots[i] != 0) { printf("%d ", time_slots[i]); } } printf("\n"); return 0; } ``` 该程序的基本思路是:先读入作业,并按效益降序排序。然后,使用集合树算法计算最优解。最后,输出最优解的效益值和作业编号。 以下是程序的详细解释。 首先,程序包含了 `stdio.h` 和 `stdlib.h` 两个头文件。前者定义了一些 I/O 函,后者定义了一些通用函。 ```c #include <stdio.h> #include <stdlib.h> ``` 然后,程序定义了一个作业结构体 `Job`,该结构体包含作业的编号、截止期限和效益。 ```c typedef struct { int id; // 作业编号 int d; // 截止期限 int p; // 效益 } Job; ``` 接着,程序定义了一个比较函 `cmp`,该函用于按效益降序排序。 ```c int cmp(const void *a, const void *b) { Job *job1 = (Job *)a; Job *job2 = (Job *)b; return job2->p - job1->p; } ``` 然后,程序进入 `main` 函。该函首先读入作业。 ```c // 读入作业 int n; Job jobs[200]; scanf("%d", &n); for (int i = 0; i < n; i++) { jobs[i].id = i + 1; scanf("%d%d", &jobs[i].d, &jobs[i].p); } ``` 注意,该程序假设输入的作业量不会超过 200。 接着,程序使用 `qsort` 函按效益降序排序。 ```c // 按效益降序排序 qsort(jobs, n, sizeof(Job), cmp); ``` 注意,该函需要传入四个参:待排序组的起始地址、元素的个、每个元素的大小、比较函的指针。在本程序,所有作业都存储在 `jobs` ,元素个为 `n`,每个元素的大小为 `sizeof(Job)`,比较函为 `cmp`。 接着,程序使用集合树算法计算最优解。该算法的基本思路是:按照效益降序处理作业,对于每个作业,将其按截止期限逆序放置在第一个空闲的位置上。在该过程,如果某个作业无法在其截止期限之前完成,则舍弃该作业。 ```c // 使用集合树算法计算最优解 int max_profit = 0; int time_slots[200] = {0}; for (int i = 0; i < n; i++) { for (int j = jobs[i].d - 1; j >= 0; j--) { if (time_slots[j] == 0) { time_slots[j] = jobs[i].id; max_profit += jobs[i].p; break; } } } ``` 最后,程序输出最优解的效益值和作业编号。 ```c // 输出结果 printf("%d\n", max_profit); for (int i = 0; i < n; i++) { if (time_slots[i] != 0) { printf("%d ", time_slots[i]); } } printf("\n"); ``` 注意,该程序输出的作业编号是按照时间片分配顺序输出的,因此可能与输入顺序不完全一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值