一、题目
函数原型: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; }