淘淘摘苹果(升级版)

发布时间 2023-04-27 19:16:48作者: harper886

淘淘摘苹果(升级版)


今天在洛谷上面做了很久的题
下面的代码加注释

#include <stdio.h>
#include <string.h>
//void paixu(int arr[], int brr[], int len) {
//
//
//}
int main() {
	int n, s;
	int a, b;
	scanf("%d %d", &n, &s);//搜集苹果数n,以及力气s 
	scanf("%d %d", &a, &b);//搜集椅子高度,和淘淘可以够到的最大值 
	int arr[n];//定义一个数组记录摘每个苹果的力气; 
	int brr[n];//用来记录苹果离地的高度 
	int len; 
	len = n;//记录数组的长度 
	int count = 0;//用来记录每个可以摘到的苹果数 
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &brr[i], &arr[i]);
	}//循环n次用来收集苹果高度和需要的力气 


/*
下面是选择排序,因为我是废物,只能写出选择排序; 


*/ 
	int temp;
	int temp1;
	int a1;
	for (a1 = len - 1; a1 > 0; a1--) {//前面的a定义过了。所以这里用a1. 
		int maxid = 0;//定义一开始的maxid为0 
		for (int i = 0; i <= a1; i++) {
			if (arr[maxid] < arr[i]) {
				maxid = i;
			}//找出最大值,然后数组向前移动一位 
		}
		temp = arr[a1];
		temp1 = brr[a1];
		arr[a1] = arr[maxid];
		brr[a1] = brr[maxid];
		arr[maxid] = temp;
		brr[maxid] = temp1;//用力气的大小来排序,同时让苹果离地高度与其一一对应 
		//不会用结构体所以用两个数组 
	}

//	for (int i = 0; i < n; i++) {
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//	for (int i = 0; i < n; i++) {
//		printf("%d ", brr[i]);
//	}
	for(int i=0;i<n;i++){
		if(a+b>=brr[i]&&s>=arr[i]){//同时满足力气够和够得着 
			s=s-arr[i];//花费力气 
			count++;//苹果数加1 
		}
	}
//	int arr[] = {1,7,1,38,2,4,8734};
//	int len;
//	len=sizeof(arr)/sizeof(arr[0]);
//	paixu(arr,len);

//
//	for (int i = 0; i <= len - 1; i++) {
//		printf("%d ", arr[i]);
//	}
//

printf("%d",count);//打印苹果数 
	return 0;
}