首页 > 试题广场 >

统计同成绩学生(20)

[编程题]统计同成绩学生(20)
  • 热度指数:11332 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出。

输入描述:
输入在第1行给出不超过105的正整数N,即学生总人数。随后1行给出N名学生的百分制整数成绩,中间以空格分隔。最后1行给出要查询的分
数个数K(不超过N的正整数),随后是K个分数,中间以空格分隔。


输出描述:
在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。
示例1

输入

10
60 75 90 55 75 99 82 90 75 50
3 75 90 88

输出

3 2 0
推荐
典型的“计数排序”的应用。由于是百分制成绩(0~100),可以设一个数组freq[101],其中freq[0]代表分数0出现的次数,freq[1]代表分数1出现的次数,。。。,freq[100]代表分数100出现的次数。
再设一数组fen[ ], 先输入n, 然后依次输入n个成绩,存入数组fen[ ], 同时统计该成绩出现的次数,即freq[ fen[ i ] ]++, 其中fen[i]代表输入的第i个成绩。
再设一个数组cha[ ], 输入k,然后输入要查询的k个成绩。
最后遍历数组cha[ ] , 在遍历的同时输出数组freq[ cha[i] ]的值即可。
参考代码如下:

#include<stdio.h>

#define N 100000
int fen[N]; //分数
int cha[N]; //要查询的分数

int main()
{
    int n;
    while(scanf("%d",&n)==1)
    {
        int i,k;
        int freq[101]={0};  //0分~100分分别出现的次数
        for(i=0;i<n;i++)
        {
            scanf("%d",&fen[i]);    //输入某个分数
            freq[fen[i]]++;         //统计某个分数出现的次数
        }
        scanf("%d",&k);
        for(i=0;i<k;i++)scanf("%d",&cha[i]);    //输入要查询的分数
        for(i=0;i<k;i++)
        {   //要查询的分数出现的次数
            if(i==0)printf("%d",freq[cha[i]]);  //第1个数
            else printf(" %d",freq[cha[i]]);    //从第2个数开始,每个数前面有1个空格
        }
        printf("\n");   //最后一个数后面换行
    }
    return 0;
}

编辑于 2015-08-18 22:33:18 回复(2)

python解法:

MMP,这道题的输入只有一行,千万别当成了三行,所以要从一行的数据切出这三条信息。。

accept解法如下:

a=list(map(int,input().split()))
n,res=a[0],[]
for i in a[n+2:]:
    res.append(str(a[1:n+1].count(i)))
print(" ".join(res))

如果是输入三行,代码如下

a,b,c,res=input(),list(map(int,input().split())),list(map(int,input().split())),[]
for i in c[1:]:
    res.append(str(b.count(i)))
print(" ".join(res))
发表于 2017-10-13 08:29:06 回复(9)
#include <iostream>
using namespace std;

int main(){
    int score[110]={0};
    int x,y,a;
    cin>>x;
    for(int i=0;i<x;i++){
        cin>>a;
        score[a]++;
    }
    cin>>y;
    for(int i=0;i<y;i++){
        cin>>a;
        cout<<score[a];
        if(i<y-1) cout<<" ";
    }
    return 0;
}

编辑于 2018-01-24 23:28:00 回复(4)
//本代码思路:使用map装入数据,key装成绩,value装人数,然后按查询输出结果
import java.util.Scanner;
import java.util.Map;
import java.util.TreeMap;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            Map<Integer,Integer> map = new TreeMap<>();
            for(int i=0;i<n;i++){
                int k = sc.nextInt();
                if(map.containsKey(k)){
                    map.put(k,map.get(k)+1);
                }else{
                    map.put(k,1);
                }
            }
            int num = sc.nextInt();
            for(int i=0;i<num;i++){
                int key = sc.nextInt();
                if(map.containsKey(key)){
                    System.out.print(map.get(key));
                }else{
                    System.out.print(0);
                }
                if(i != num-1){
                    System.out.print(" ");
                }
            }
        }
    }
}

发表于 2018-10-13 15:57:59 回复(0)

#include<iostream>
using namespace std;
 
intmain()
{
    longN,k;
    intStuGrade[10000],FinGrade[10000],FinResult[10000];
    cin>>N;
    inti,j;
    for(i=0;i<N;i++)
        cin>>StuGrade[i];
    cin>>k;
    for(i=0;i<k;i++)
        cin>>FinGrade[i];
    //find the same grade,statistic the number
    for(i=0;i<k;i++){
        for(j=0;j<N;j++){
            if(FinGrade[i]==StuGrade[j])
                FinResult[i]++;
        }
        cout<<FinResult[i];
        if(i<k-1)
            cout<<" ";
    }
 
    return0;
}

发表于 2017-01-15 17:00:13 回复(0)
#include <iostream>
using namespace std;
int CountScore(int a[],int n,int score)
{
    int count=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]==score)
        {
            count++;
        }
    }
    return count;
}
int main()
{
    int n,k,score;
    int a[10001]={0};
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>score;
        a[i]=score;
    }
    cin>>k;
    for(int i=0;i<k;i++)
    {
        cin>>score;
        if(i!=k-1)cout<<CountScore(a,n,score)<<" ";
        else cout<<CountScore(a,n,score);

    }
    return 0;

}

发表于 2015-06-23 09:37:46 回复(0)
import java.util.Scanner;

/**
 * 跟奥巴马一起编程
 * 题目描述
 * 美国***奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的***。
 * 2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。
 * 现在你也跟他一起画吧!
 * 输入描述:
 * 输入在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格。
 * 输出描述:
 * 输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的
 * 行数实际上是列数的50%(四舍五入取整)。
 * 输入例子:
 * 10 a
 * 输出例子:
 * aaaaaaaaaa
 * a        a
 * a        a
 * a        a
 * aaaaaaaaaa
 *
 * @author shijiacheng
 * @date 2018/1/31
 */
public class B1026CodingWithObama {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        String c = sc.next();
        int row = N / 2;
        if (N % 2 != 0) {
            row = N / 2 + 1;
        }

        if (row == 2) {
            for (int i = 0; i < N; i++) {
                System.out.print(c);
            }
            System.out.println();
            for (int i = 0; i < N; i++) {
                System.out.print(c);
            }
        } else {
            for (int i = 0; i < N; i++) {
                System.out.print(c);
            }
            System.out.println();
            for (int i = 0; i < row - 2; i++) {
                System.out.print(c);
                for (int j = 0; j < N - 2; j++) {
                    System.out.print(" ");
                }
                System.out.print(c);
                System.out.println();
            }

            for (int i = 0; i < N; i++) {
                System.out.print(c);
            }
        }
    }
}
发表于 2018-01-31 20:14:04 回复(0)
最简单的C++解法
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
map<int,int> mp;
int main()
{
    int n,m,t;
    cin>>n;
    for(int i=0; i<n; ++i){
        cin>>t;
        mp[t]++;
    }
    cin>>m;
    for(int i=0; i<m; ++i){
        cin>>t;
        cout<<mp[t];
        if(i!=m-1) cout<<' ';
        else cout<<endl;
    }
    return 0;
}

编辑于 2020-11-07 10:27:11 回复(0)
#include<iostream>
using namespace std;

int main(){
    int N, n, temp, hash[101] = {0}; 
    cin>>N;
    while(N--){
        cin>>temp;
        hash[temp]++;
    }
    cin>>n;
    while(n--){
        cin>>temp;
        cout<<hash[temp]<<((n >= 1)?" ":"");
    }
    return 0;
}


发表于 2020-10-31 17:14:17 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] sorce = new int[101];
        for (int i=0;i<n;i++){
            sorce[in.nextInt()]++;
        }
        int m = in.nextInt();
        for (int i=0;i<m;i++){
            if (i == m - 1) {
                System.out.print(sorce[in.nextInt()]);
            }else {
                System.out.print(sorce[in.nextInt()]+" ");
            }
        }
    }
}



发表于 2020-07-26 21:29:07 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n,grade;
    cin >> n;
    int num[101]={0};
    while(n--){
        cin >> grade;
        num[grade]++;
    }
    cin >> n;
    while(n--){
        cin >> grade;
        cout << num[grade];
        if(n!=0) cout << ' ';
    }
    return 0;
}

发表于 2020-03-05 17:25:28 回复(0)
我是先全部输入完之后,再输出结果,还算简洁了我认为
#include <iostream>
using namespace std;

int main(int argc, char** argv) {

	int arr[101] = {0}, re[101] = {0};
	int nums, score;
	cin >> nums;
	for(int i = 0; i < nums; i++){ 
		cin >> score;
		arr[score]++;
	} 
	cin >> nums;
	for(int i = 0; i < nums; i++){
		cin >> score;
		arr[score] == 0 ? re[i] = 0 : re[i] = arr[score];
	}
	
	for(int i = 0; i < nums; i++){
		cout << re[i];
		if(i!=nums-1) cout << " ";
	}

	return 0;
}


发表于 2020-02-14 11:24:47 回复(0)
#include<stdio.h>
#include<stdlib.h>
# define max 1000
int main()
{
 int n,num,score,i,k,flage=0;
 int a[max]={0};
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  scanf("%d",&score);
  a[score]++;                                   //用分数来做数组下标,避免双重循环运行超时
 }
 scanf("%d",&num);
 for(i=0;i<num;i++)
 {
  scanf("%d",&k);
  if(flage==0)
  {
   printf("%d",a[k]);
   flage++;
   continue;
  }
  printf(" %d",a[k]);
 }
 system("pause");
 return 0;
}
发表于 2019-08-05 17:48:05 回复(0)
#include<iostream> using namespace std; int main(){     int n;     cin>>n;     int score[n];     for(int i=0;i<n;i++){     cin>>score[i];     }     int count;     cin>>count;     int Find_Score[count];     for(int i=0;i<n;i++){     cin>>Find_Score[i];     }     for(int i=0;i<count;i++){         int N=0;         for(int j=0;j<n;j++){             if(score[j]==Find_Score[i]){                 N++;             }         }             cout<<N;         if(i<count-1)             cout<<" ";              }       }

发表于 2019-04-24 20:49:58 回复(0)
while True:
    try:
        tempInput = list(map(int,input().split()))
        grades = tempInput[1:tempInput[0]+1]
        findGrades = tempInput[tempInput[0]+1:]
        result = []
        for i in findGrades[1:]:
            result.append(grades.count(i))
        print(' '.join(map(str,result)))
    except Exception:
        break
编辑于 2018-10-14 14:23:23 回复(0)
一点弯都没有,但在官网上会运算超时,看来不能用双重for循环,真是难为我这初学者。
#include 
int main ()
{    
    int N, i;  
    scanf("%d",&N);  
    int a[N];
    for (i = 0;i < N;i++){          
        scanf("%d",&a[i]); 
    }  
    int K, j;  
    scanf("%d",&K);  
    int s[K], n[K];  
    for (j = 0;j < K;j++){                          
        scanf("%d",&s[i]);  
        n[j] = 0;  
        for (i = 0;i < N;i++){ 
            if (a[i] == s[j]){          
                n[j]++;  
            }  
        }
        printf("%d ",n[j]); 
    }  
    printf("%d",n[K - 1]);          
    return 0;
}

编辑于 2018-02-22 16:37:04 回复(1)
#include<stdio.h>
int main (){//the shorter,the better.
    int n,i,t;
    for(;~scanf("%d",&n);){
       int s[100];for (i = 0; i < n&&~scanf("%d",&t);++s[t],i++);
       for (scanf("%d",&n),i = 0; i < n&&~scanf("%d",&t);++i,printf(i==n?"%d\n":"%d ",s[t]));
    }
}

发表于 2018-01-29 18:07:19 回复(1)
import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int N = sc.nextInt();
            int num[] = new int[101];//用以存储每个分数段的人数。
            for(int i = 0; i < N; i++){
                num[sc.nextInt()]++;
            }
            int K = sc.nextInt();
            for(int i = 0; i < K; i++){
                System.out.print(num[sc.nextInt()]);
                if(i != K-1)
                    System.out.print(" ");
            }
        }
        sc.close();
    }
}

发表于 2017-12-15 16:59:47 回复(0)
importjava.util.HashMap;
importjava.util.Map;
importjava.util.Scanner;
 
/*
 * 题目有坑,输入格式表达有问题,应该是一次性输入学生数目,成绩,查询数目,查询分数,这些都是在一行 */
publicclassMain {
    publicstaticvoidmain(String[] args) {
        // TODO Auto-generated method stub
        Map<Integer,Integer> stu = newHashMap<>();
        Scanner sc = newScanner(System.in);
        intnum = sc.nextInt();
        for(inti=0;i<num;i++) {
            inttmp = sc.nextInt();
            if(stu.containsKey(tmp)){
                stu.put(tmp, stu.get(tmp)+1);
            }else{
                stu.put(tmp, 1);
            }
        }
        intsearchNum = sc.nextInt();
        for(inti = 1;i<searchNum;i++){
            inttmp = sc.nextInt();
            if(stu.containsKey(tmp)){
                System.out.print(stu.get(tmp)+" ");
            }else{
                System.out.print(0+" ");
            }
             
        }
        inttmp = sc.nextInt();
        if(stu.containsKey(tmp)){
            System.out.println(stu.get(tmp));
        }else{
            System.out.print(0);
        }
    }
 
}

发表于 2017-08-20 19:51:14 回复(0)
#include 
int main(){
 int mark[101] = {0}, n, score, m[101], i = 0, j;
 scanf("%d", &n);
 while (n--){
  scanf("%d", &score);
  mark[score]++;
 }
 scanf("%d", &n);
 j = n;
 while (n--){
  scanf("%d", &score);
  m[i] = score;
  i++;
 }
 for (i = 0; i < j; i++)
  i != j - 1 ? printf("%d ", mark[m[i]]) : printf("%d", mark[m[i]]);
 return 0;
}
发表于 2017-08-08 17:25:02 回复(1)
//果断妙计,数组都快被玩坏了~哈哈哈
import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while(in.hasNext()){
			int n=in.nextInt();
			int[] score=new int[101];
			for (int i = 0; i < n; i++) {
				int tn=in.nextInt();
				score[tn]++;
			}
			
			int m=in.nextInt();
			for (int i = 0; i < m; i++) {
				int tm=in.nextInt();
				if(i!=m-1){
					System.out.print(score[tm]+" ");
				}
				else{
					System.out.println(score[tm]);
				}
			}
		}
	}
}
发表于 2017-07-08 10:45:30 回复(4)