一道C++编程题,怎么也调试不成功,求大神帮看
#include<iostream>usingnamespacestd;constintOFFSET=500000;intHash[1000001];intmain(){...
#include<iostream>
using namespace std;
const int OFFSET =500000;
int Hash[1000001];
int main()
{
int n,m;
while(cin>>m>>n)
{
for(int i=-500000;i<=500000;i++)
{
Hash[i+OFFSET]=0;
}
for(int i=500000;i>=-500000;i--)
{
if(Hash[i+OFFSET]==1)
{
cout<<i;
m--;
if(m!=0)
cout<<" ";
else{
cout<<"\n";
break;
}
}
}
}
return 0;
}
题目描述:
给你n个整数,请按从大到小的顺序输出其中前m大的数。
输入:
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
输出:
对每组测试数据按从大到小的顺序输出前m大的数。
样例输入:
5 3
3 -35 92 213 -644
样例输出:
213 92 3 展开
using namespace std;
const int OFFSET =500000;
int Hash[1000001];
int main()
{
int n,m;
while(cin>>m>>n)
{
for(int i=-500000;i<=500000;i++)
{
Hash[i+OFFSET]=0;
}
for(int i=500000;i>=-500000;i--)
{
if(Hash[i+OFFSET]==1)
{
cout<<i;
m--;
if(m!=0)
cout<<" ";
else{
cout<<"\n";
break;
}
}
}
}
return 0;
}
题目描述:
给你n个整数,请按从大到小的顺序输出其中前m大的数。
输入:
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
输出:
对每组测试数据按从大到小的顺序输出前m大的数。
样例输入:
5 3
3 -35 92 213 -644
样例输出:
213 92 3 展开
展开全部
你都没把3 -35 92 213 -644给读进去。
追问
对啊。不知道应该怎么改
追答
额,好吧。
#include<iostream>
using namespace std;
int Hash[1000001];
int main()
{
int m,n;
while(cin>>m>>n)
{
int i;
int t;
for(i=0;i<1000001;i++)
{
Hash[i]=500001;
}
for(i=0;i<m;i++)
{
cin >> t;
Hash[t+500000]=t;
}
int cnt=0;
i=1000000;
while(cnt<n)
{
if(Hash[i] != 500001)
{
if(cnt == 0)
{
cout << Hash[i];
}
else
{
cout << " " << Hash[i];
}
cnt ++;
}
i--;
}
cout << endl;
}
//system("pause");
return 0;
}
展开全部
很明显,你先把Hash数组都清为0,那他们怎么可能会是1??
这个题目建议用桶排,代码:
#include <iostream>
#include <cstring> //使用memset
#define HASH(i) Hash[i+INF]//使用宏,允许数组下标为负
using namespace std;
const int INF=500000;
int Hash[INF+INF+100];
int main(){
memset(Hash,0,sizeof Hash);//清空Hash数组(全部赋值为0)
int n,m;
cin>>n>>m;
for(int i=1,a;i<=n;i++){
cin>>a;
HASH(a)=1;
}
for(int i=INF;i>=-INF&&m>0;i--)
if(HASH(i)==1){
cout<<i<<" ";
m--;
}
cout<<endl;
return 0;
}
这个题目建议用桶排,代码:
#include <iostream>
#include <cstring> //使用memset
#define HASH(i) Hash[i+INF]//使用宏,允许数组下标为负
using namespace std;
const int INF=500000;
int Hash[INF+INF+100];
int main(){
memset(Hash,0,sizeof Hash);//清空Hash数组(全部赋值为0)
int n,m;
cin>>n>>m;
for(int i=1,a;i<=n;i++){
cin>>a;
HASH(a)=1;
}
for(int i=INF;i>=-INF&&m>0;i--)
if(HASH(i)==1){
cout<<i<<" ";
m--;
}
cout<<endl;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询