PAT-乙級 1032 挖掘機技術哪家強(C語言)

代碼中的註釋部分爲調試時所加,刪去無影響

#include <stdio.h>
#include<stdlib.h>

struct studentData{
	int Id;
	int achievement;
};

int main() {
	//獲取數據
	int inputNumbers;
	scanf("%d", &inputNumbers);
	struct studentData* pointer;
	pointer = calloc(inputNumbers, sizeof(struct studentData));
	int i;
	for (i = 0; i < inputNumbers; i++){
		scanf("%d", &(pointer+i)->Id);
		scanf("%d", &(pointer + i)->achievement);
	}
	//存放總成績的數組
	int* intPointer;
	intPointer = calloc(inputNumbers + 1, sizeof(int));
	int input=1;
	//放進去
	while (input<=inputNumbers) {
		i = (pointer + input - 1)->Id;
		*(intPointer + i) += (pointer + input - 1)->achievement;
		input++;
	}
	/*for (i = 1; i <= inputNumbers; i++) {
		printf("%d\n", *(intPointer + i));
	}*/
	//printf("...........................");
	int max = 0,max_id=0;
	for (i = 1; i <= inputNumbers; i++) {
		if (*(intPointer + i) > max) {
			max = *(intPointer + i);
			max_id = i;
		}
	}
	printf("%d %d", max_id,max);
	free(intPointer);
	free(pointer);
	//system("pause");
	return 0;
}

又改了下,儘量少向系統申請一些內存,雖然看起來複雜,其實邏輯上並不難

#include <stdio.h>

struct studentData {
	int id;
	int achievement;
};

int main() {
	int inputNumbers;
	scanf("%d", &inputNumbers);
	struct studentData* dataPointer;
	dataPointer = calloc(inputNumbers, sizeof(struct studentData));
	int i, arrayNumber=0;
	for (i = 0; i < inputNumbers; i++) {
		scanf("%d", &(dataPointer + i)->id);
		scanf("%d", &(dataPointer + i)->achievement);
		if ((dataPointer + i)->id > arrayNumber)
			arrayNumber = (dataPointer+i)->id;
	}
	int* arrayPointer;
	arrayPointer = calloc(arrayNumber + 1, sizeof(int));
	for (i = 0; i < inputNumbers;i++) {
		*(arrayPointer + (dataPointer + i)->id) += (dataPointer + i)->achievement;
	}
	int max = 0, max_id = 0;
	for (i = 1; i <= arrayNumber; i++) {
		if (*(arrayPointer + i) > max) {
			max = *(arrayPointer + i);
			max_id = i;
		}
	}
	printf("%d %d", max_id, max);
	free(dataPointer);
	free(arrayPointer);
	//system("pause");
	return 0;
}

此外,如果使用鏈表,可以更省一些內存,有興趣的可以試試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章