一、题目
函数原型:char** findRelativeRanks(int* score, int scoreSize, int* returnSize)
二、思路
创建一个新的数组newscore,将原数组数据拷贝到新数组,降序排序新数组。
遍历原数组,在新数组中找到原数组中数据在新数组中的位置,该位置即表示名次。
将对应的名词信息填入字符串数组中即可。
三、代码
int cmp(const void* e1, const void* e2) {return *(int*)e2 - *(int*)e1; } char** findRelativeRanks(int* score, int scoreSize, int* returnSize) {*returnSize = scoreSize;int* newscore = (int*)malloc(sizeof(int) * scoreSize);//新数组for (int k = 0; k < scoreSize; k++)//将原数组数据拷贝到新数组{newscore[k] = score[k];}qsort(newscore, scoreSize, sizeof(int), cmp);//排序新数组(降序)char** ans = (char**)malloc(sizeof(char*) * scoreSize);//字符串数组for (int j = 0; j < scoreSize; j++)//遍历原数组{for (int i = 0; i < scoreSize; i++)//在新数组中查找原数组数据的位置{if (score[j] == newscore[i]){ans[j] = (char*)malloc(sizeof(char) * 13);//申请字符串空间memset(ans[j], 0, sizeof(char) * 13);switch (i + 1){case 1:ans[j] = "Gold Medal";break;case 2:ans[j] = "Silver Medal";break;case 3:ans[j] = "Bronze Medal";break;default:sprintf(ans[j], "%d", i + 1);break;}break;}}}return ans; }