题目描述:给你n个整数,请按从大到小的顺序输出其中前m大的数输入:每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数输出:对每组测试数据按从大到小的顺序输出前m大的数
这是我的代码:
只要一运行就报错,一下是报错的情况:
请教大家为什么程序运行不了呢,编译是正确的,十分感谢大家。
走同样的路,发现不同的人生
都說題主的開數組有問題我就把題主的程式碼放到OJ上去跑一下嘍
PS: 題主的輸出格式有個坑, 按照讓題主理解和修改最小的原則我給你的代碼完善了一下
#include <stdio.h> #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"); break; } else if(t[i]==1) { printf("%d", i-N); // 这里没有空格了 num++; if (num != m){ printf(" "); // 这里是个坑, 因为最后一个输出是没有空格的 } } } } return 0; }
HDU
九度的
題目都說了, Hash演算法, 並不是排序問題.
這題ACM的基礎題, 拿輸入的數加上500000避免負數當key, value是出現的次數, 如果value在輸入的時候就直接做到了排序.
然後輸出的時候把只輸出value不為0的key就可以了
網路上很多答案
http://www.cnblogs.com/acmer-...
堆疊中開這麼大的陣列?
還有這種考試研究題不用這樣問吧。
1.把t定義到堆疊2.輸入n,m之後再判斷下大小關係,會不會好點
你的陣列開得太大,很有可能爆棧。可以嘗試用new申請一個陣列。
new
都說題主的開數組有問題我就把題主的程式碼放到OJ上去跑一下嘍
PS: 題主的輸出格式有個坑, 按照讓題主理解和修改最小的原則我給你的代碼完善了一下
HDU
九度的
題目都說了, Hash演算法, 並不是排序問題.
這題ACM的基礎題, 拿輸入的數加上500000避免負數當key, value是出現的次數, 如果value在輸入的時候就直接做到了排序.
然後輸出的時候把只輸出value不為0的key就可以了
網路上很多答案
http://www.cnblogs.com/acmer-...
堆疊中開這麼大的陣列?
還有這種考試研究題不用這樣問吧。
1.把t定義到堆疊
2.輸入n,m之後再判斷下大小關係,會不會好點
你的陣列開得太大,很有可能爆棧。可以嘗試用
new
申請一個陣列。