【发布时间】:2021-12-28 16:06:23
【问题描述】:
我是中国zju的学生,这是我的PTA问题,程序在clion上运行会返回0xC0000005。
请帮助解决问题并告诉我原因。
谢谢。
这是我的代码:
#include "stdio.h"
int weights[10010];
int hats[10010], hats2[10010];
int weight2Pos[10010];
int rank2Weight[10010];
int hats2Rank[10010];
int cmp(const void* _a , const void* _b)
{
int* a = (int*)_a;
int* b = (int*)_b;
return *b - *a;
}
void sort_1(int n)
{
qsort(hats2[0],n,sizeof(int),cmp);
}
void sort_2(int n)
{
qsort(weights[0],n,sizeof(int),cmp);
}
int main(){
int n;
scanf("%d", &n);
for(int i = 0; i < n; ++i){
scanf("%d", &hats[i]);
hats2[i] = hats[i];
}
sort_1(n);
for(int i = 0; i < n; ++i) hats2Rank[hats2[i]] = i + 1;
for(int i = 0; i < n; ++i){
scanf("%d", &weights[i]);
weight2Pos[weights[i]] = i + 1;
}
sort_2(n);
for(int i = 0; i < n; ++i) rank2Weight[i + 1] = weights[i];
for(int i = n - 1; i >= 0; --i){
if(i == 0) printf("%d\n", weight2Pos[rank2Weight[hats2Rank[hats[i]]]]);
else printf("%d ", weight2Pos[rank2Weight[hats2Rank[hats[i]]]]);
}
return 0;
}
问题:
PATer 认为戴帽子会让他们看起来很帅,所以无论走到哪里,每个人都会戴帽子。有一天,他们来到一家餐馆,服务员把他们的帽子收了起来,堆了起来。但是当他们准备离开时,他们不得不面对如上图所示的一堆帽子。所以你的工作就是帮他们排好队,让每个人都能一一拿起帽子,不费吹灰之力。
众所周知,每一顶帽子都有一个独特的尺寸,这与主人的体重有关——也就是说,越重的人戴的帽子越大。
输入规范:
每个输入文件包含一个测试用例。对于每种情况,第一行包含一个正数 N (≤104),它是 PATers 的数量。下一行给出了 N 个不同大小的帽子,它们是不超过 105 的正数。这些大小对应于堆栈中自下而上的帽子。最后在最后一行,给出了N个不同的权重,对应从1到N编号的帽子所有者。权重是不超过106的正数。一行中的所有数字用空格分隔。
输出规格:
对于每个测试用例,按照拿起帽子的顺序打印一行帽子所有者的索引。所有数字必须用 1 个空格隔开,并且行首或行尾不能有多余的空格。
示例输入:
10
12 19 13 11 15 18 17 14 16 20
67 90 180 98 87 105 76 88 150 124
样本输出:
3 4 8 6 10 2 1 5 9 7
【问题讨论】:
-
请阅读How to Ask。您是否在调试器中运行代码以查看错误在哪里?学习调试程序与学习语言一样重要。如果你不知道怎么做,有很多在线教程可供搜索。
-
为什么只将数组的一个元素传递给
qsort? -
YC 张,节省时间。启用所有编译器警告。快速找到
qsort(hats2[0],n,sizeof(int),cmp);等问题。
标签: c