代碼中的註釋部分爲調試時所加,刪去無影響
#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;
}