题目描述:给你n个整数,请按从大到小的顺序输出其中前m大的数
输入:每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数
输出:对每组测试数据按从大到小的顺序输出前m大的数
这是我的代码:
只要一运行就报错,一下是报错的情况:
请教大家为什么程序运行不了呢,编译是正确的,十分感谢大家。
黄舟2017-04-17 14:46:13
みんながサブジェクトのオープン配列に問題があると言っていたので、サブジェクトのコードを OJ に置いて実行してみます
追記: 質問者の出力形式には落とし穴がありました。質問者が理解し、最小限の変更を加えられるようにするという原則に従ってコードを改善しました。
#include
#define N 500000
int main() {
int n、m;
int t[1000001];
while(scanf("%d%d", &n, &m) != EOF) {
for(int i = 0; i <= 1000000; i++) {
t[i] = 0;
}
while(n--) {
int x;
scanf("%d", &x);
t[x+N]=1;
}
int num=0;
for (int i = 1000000; i>=0; i--) {
if (num==m) {
printf("\n");
壊す;
}
else if(t[i]==1) {
printf("%d", i-N); // ここにはスペースはありません
数値++;
if (数値 != m){
printf(" "); // 最後の出力にはスペースがないため、これはトラップです。
}
}
}
}
0を返します。
}
HDU
< /スパン>
ナイン ディグリーズ
タイトルで述べたように、ハッシュ アルゴリズムは並べ替えの問題ではありません。
これは ACM の基本的な質問です。値をキーとして使用しないように、入力数値に 500000 を加えます。
出力するときは、値が 0 ではないキーだけを出力します。
インターネット上には多くの回答があります
http://www.cnblogs.com/acmer-...