第一题:
这道算法题算是非常简单了,直接用Hash思想即可解决问题。
代码如下:
#include<stdio.h>
int n;
int s;
int isFirst=1;//如果有格式要求,则定义是否是第一个,如果不是第一个就要先输出一个回车在输出数
int main(){
freopen("in.txt","r",stdin);
while(scanf("%d",&n)!=EOF&&n!=0){
int score[101]={0};//非常简单的初始化方法
while(n--){
int tmp;
scanf("%d",&tmp);
score[tmp]++;
}
scanf("%d",&s);
if(isFirst){
printf("%d",score[s]);
isFirst=0;
}
else{
printf("\n%d",score[s]);
}
}
return 0;
}
第二题:
注意:这道题虽然叫sort,但是不能用sort函数,因为这个n的范围是百万范围,如果用sort的话,sort的复杂度是O(nlogn)这样的话会超时,但是如果我们用一个数组,采用hash思想,只需要遍历一遍数组即可。
代码如下:
#include<stdio.h>
#define OFFSET 500000
int a[1000001];
int n,m;
int main(){
freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=0;i<1000001;i++){
a[i]=0;
}
while(n--)
{
int tmp;
scanf("%d",&tmp);
a[tmp+OFFSET]=1;
}
for(int k=1000000;k>=0;k--){
if(a[k]==1){
printf("%d",k-OFFSET);
m--;
if(m==0){
printf("\n");
break;
}
else{
printf(" ");
}
}
}
}
return 0;
}