首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

ACM 统计同成绩学陌生人数

2012-09-03 
ACM 统计同成绩学生人数统计同成绩学生人数Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/3

ACM 统计同成绩学生人数

统计同成绩学生人数
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2139 Accepted Submission(s): 1211


Problem Description
读入N名学生的成绩,将获得某一给定分数的学生人数输出。

 

Input
测试输入包含若干测试用例,每个测试用例的格式为


第1行:N
第2行:N名学生的成绩,相邻两数字用一个空格间隔。
第3行:给定分数

当读到N=0时输入结束。其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。

 

Output
对每个测试用例,将获得给定分数的学生人数输出。

 

Sample Input
3
80 60 90
60
2
85 66
0
5
60 75 90 55 75
75
0
 

Sample Output
1
0
2

HintHint 
Huge input, scanf is recommended.//这句没搞懂

我的答案:上面结果对,但提交Wang Answer! Why??请指点一下!Thanks..

#include<stdio.h>
void main()
{
long n,i,j,a[1000],m;
while(scanf("%ld",&n),n)
{
for(i=1;i<=n;i++)
scanf("%ld",&a[i]);
scanf("%ld",&m);
j=0;
for(i=1;i<=n;i++)
{
if(m==a[i])
j++;
}
printf("%ld\n",j);
}
}



[解决办法]
简单题,不过你的方法不对,我是acmer,交个朋友吧,QQ:644564964
#include <stdio.h> 
void main() 

int i,n,b;
while(scanf("%d",&n)!=EOF)
{
a[101]={0};
for(i=0;i<n;i++)
{
scanf("%d",&b);
a[b]++;
}
scanf("%d",&b);
printf("%d\n",a[b]);


试试吧,不行再找我

[解决办法]
scanf is recommended/// 这句的意思 是 推荐使用scanf,这样效率会高些。 如用cin可能会超时,因为此题数据里太大。。。
[解决办法]
当n=1000时,你的程序就挂掉了,因为会访问到a[1000]。而你定义的数组下标最大到999.而且a[0]这个元素你也没有使用到。
你把i=1;i<=n改成i=0;i<n试试,应该没问题了。

另外,6楼的方法更好,输入读完后,每个分数的人数也就确定了。
[解决办法]
看我的代码,
在oj上通过,


#include<stdio.h>
main()
{
int score;
int n;
int num;
int a[1000];
int *p;
for (;;)
{
scanf("%d",&n);
if(n==0)
break ;
num=0;
for (p=a;p<a+n;p++)
scanf ("%d",p);
scanf("%d",&score);
for (p=a;p<a+n;p++)
if (*p==score)
num++;
printf("%d\n",num);
}
}

[解决办法]
确实是8楼提到的问题,把a[1000]改成[a1001]就通过了,6楼的同学方法很不错不过要稍微改下

#include <stdio.h>
void main()
{
int i,n,b;
for (;;)//只是把while改成for语句
{
int a[101]={0};//原来的少了个int
scanf("%d",&n);
if (n==0)
break;
for(i=0;i <n;i++)
{
scanf("%d",&b);
a[b]++;
}
scanf("%d",&b);
printf("%d\n",a[b]);
}

热点排行