首页 > 试题广场 >

人数统计

[编程题]人数统计
  • 热度指数:2691 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小易的公司一共有名员工, 第个人每个月的薪酬是x_i万元。
现在小易的老板向小易提了次询问, 每次询问老板都会给出一个整数, 小易要快速回答老板工资等于的员工的数量。

输入描述:
第一行,两个空格间隔的整数,表示人数和提问的次数 
第二行,个用空格间隔的整数x_i,表示每名员工的薪酬
接下来有行,每行一个整数,表示老板的一次提问。



输出描述:
行,每行一个整数,表示对应提问的答案
示例1

输入

7 4
6 2 1 2 6 2 5
6
5
8
2

输出

2
1
0
3
#输入两个参数,m总人数,n提问次数
#提问n次,每次输入询问的薪酬,输出数组内相同薪酬的元素个数
function createarray {
    for((i=0;i<$m;i++))
    do
        read member[i]
    done
    echo "${member[*]}"
 }
function selectarray {
    for((i=0;i<$n;i++))
    do
        read a
        b=0
        for c in ${member[*]}
        do
            if [ $a=$c ]
            then
                b=$((b+1))
            fi
        done
        echo $b
    done
 }
read -p "输入员工总人数和提问次数" m n
createarray
selectarray

发表于 2020-02-29 14:48:59 回复(0)
更多回答
/**
hashmap记录当前输入的数字和数量,判断是否存在。
如已存在,则直接数量加1,否则放入数字,数量设为1.
最后根据map.get(key)判断是否存在该数字,存在则返回value,否则返回0.
*/

import java.util.HashMap;
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int n,m;
        int input;
        Scanner sc = new Scanner(System.in);
        n=sc.nextInt();
        m=sc.nextInt();
        int a;
        HashMap<Integer,Integer> hm = new HashMap();
        for(int i=0;i<n;i++){
            a=sc.nextInt();
            if(hm.containsKey(a)){
                hm.put(a,hm.get(a)+1);
            }else{
                hm.put(a,1);
            }
        }
        while(m--!=0){
            input=sc.nextInt();
            if(hm.get(input)!=null){
                System.out.println(hm.get(input));
            }else{
                System.out.println(0);
            }
        }
        
    }
}


编辑于 2020-08-07 15:24:59 回复(0)
直接用哈希表来进行计数,在老板给出query时直接查询哈希表
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String start;
        while((start = br.readLine()) != null) {
            String[] strNM = start.trim().split(" ");
            int n = Integer.parseInt(strNM[0]), m = Integer.parseInt(strNM[1]);
            String[] strArr = br.readLine().trim().split(" ");
            // 直接用哈希表来计数
            HashMap<String, Integer> map = new HashMap<>();
            for(int i = 0; i < n; i++){
                if(map.containsKey(strArr[i]))
                    map.put(strArr[i], map.get(strArr[i]) + 1);
                else
                    map.put(strArr[i], 1);
            }
            for(int i = 0; i < m; i++)
                System.out.println(map.getOrDefault(br.readLine().trim(), 0));
        }
    }
}


发表于 2020-10-22 15:53:30 回复(0)
使用 字典/哈希表,薪资作为 Kye,人数作为 Value
遍历初始数组,如果 字典里含有遍历到的 薪资 Kye,则 ++dic[Key],否则 dic[Key] = 1
最后要考虑到老板提问的薪资压根不存在。即最后判定 dic.ContainsKey(Key),如果不存在则返回 0 表示压根没有人的薪资是老板给的值
C# 代码:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

public class Program
{
    public static void Main(string[] args)
    {
        string[] ipt1 = Console.ReadLine().Split(' ');
        int n = int.Parse(ipt1[0]);
        int m = int.Parse(ipt1[1]);
        string[] ipt2 = Console.ReadLine().Split(' ');

        Dictionary<int, int> dic = new Dictionary<int, int>();
        for (int i = 0; i < n; ++i)
        {
            int x = int.Parse(ipt2[i]);
            if (dic.ContainsKey(x)) ++dic[x];
            else dic.Add(x, 1);
        }

        for(int k = 0; k < m; ++k)
        {
            int q = int.Parse(Console.ReadLine());
            if(dic.ContainsKey(q)) Console.WriteLine(dic[q]);
            else Console.WriteLine(0);
        }
    }
}


发表于 2020-09-29 19:52:39 回复(0)
可以用哈希表:

#include <iostream>
#include <vector>
#include <unordered_map>
 
using namespace std;
 
int main()
{
    int n,m;
    cin>>n>>m;
    unordered_map<int, int> ump;
    for(int i = 0 ; i< n; i++)
    {
        int x;
        cin>>x;
        ump[x]++;
    }
    int k;
    while(cin>>k)
    {
        cout<<ump[k]<<endl;
    }
    return 0;
}
发表于 2020-08-07 11:22:05 回复(0)
from collections import Counter
n,m = map(int,input().split())
salary = list(map(int,input().split()))
count_dict = Counter(salary)
for i in range(m):
    question = int(input().strip())
    print(count_dict[question])
发表于 2020-07-23 17:48:01 回复(0)
离散化+二分
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int n,m; cin>>n>>m;
    ll x[n];
    for(int i=0;i<n;i++)
        cin>>x[i];
    sort(x,x+n);
    ll y[n];
    for(int i=0;i<n;i++)
        y[i]=x[i];
    int cnt=unique(x,x+n)-x;
    int num[cnt];
    memset(num,0,sizeof num);
    for(int i=0;i<n;i++) {
        int pos = lower_bound(x,x+cnt,y[i])-x;
        num[pos]++;
    }
    while(m--) {
        ll q; cin>>q;
        int pos = lower_bound(x,x+cnt,q)-x;
        if(pos>=0&&pos<cnt&&x[pos]==q)
            cout<<num[pos]<<endl;
        else
            cout<<"0"<<endl;
    }
    return 0;
}



发表于 2020-07-15 23:08:53 回复(0)
C++
#include <vector>
#include <iostream>
#include <map>

using namespace std;

vector<int> solution(vector<int>&input, vector<int>&ask){
    map<int, int> store;
    for(auto cha : input) store[cha]++;
    vector<int> res;
    for(auto cha : ask){
        if(store.count(cha) !=  0) res.push_back(store[cha]);
        else res.push_back(0);
    }
    return res;
}


int main(){
    int a, b;
    cin >> a >> b;
    vector<int> input, ask;
    int number;
    for(int i = 0; i < a; i++){
        cin >> number;
        input.push_back(number);
    }
    for(int i = 0; i < b; i++){
        cin >> number;
        ask.push_back(number);
    }
    vector<int> res = solution(input, ask);
    for(auto cha : res) cout << cha << endl;
    return 0;
}


编辑于 2020-05-11 11:54:46 回复(0)
import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            int t = in.nextInt();
            map.put(t,map.getOrDefault(t,0)+1);
            
        }
        
        for (int i = 0; i < m; i++) {
            int r = in.nextInt();
            if(map.get(r) == null) 
                System.out.println(0);
            else 
                System.out.println(map.get(r));
        }
    }
}

发表于 2020-04-07 12:24:17 回复(0)
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++)
            nums[i] = sc.nextInt();
        Map<Integer, Integer> map = solution(nums);
        for (int i = 0; i < m; i++) {
            int key = sc.nextInt();
            if (map.containsKey(key))
                System.out.println(map.get(key));
            else
                System.out.println(0);
        }
    }

    public static Map<Integer, Integer> solution(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(nums[i]))
                map.put(nums[i], map.get(nums[i]) + 1);
            else
                map.put(nums[i], 1);
        }
        return map;
    }
}

发表于 2020-04-05 19:25:16 回复(1)
from collections import Counter
n,m = map(int,input().split())
salary = list(map(int,input().split()))
frequency_dict = dict(Counter(salary))

for i in range(m):
    question = int(input())
    print(frequency_dict.get(question,0))

发表于 2020-03-30 06:53:25 回复(1)
# include <iostream>
# include <map>
using namespace std;

int main(){
    int n , m , problem;
    map<int, int> maps;
    cin >> n >> m;
    int slary[n];
    for(int i=0; i<n; i++){
        cin >> slary[i]; maps[slary[i]]++;
    }
    for(int i=0; i<m; i++){
        cin >> problem;
        cout << maps[problem] << endl;
    }
    return 0;
}
发表于 2021-03-14 13:13:23 回复(0)
import java.util.HashMap;
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int m=in.nextInt();
        HashMap<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<n;i++){
            int t=in.nextInt();
            map.put(t,map.getOrDefault(t,0)+1);
        }
        for(int i=0;i<m;i++){
            int r=in.nextInt();
            if(map.get(r)==null){
                System.out.println(0);
            }else
                System.out.println(map.get(r));
        }
    }
}

发表于 2020-10-11 09:43:30 回复(0)
import java.util.Scanner;
import java.util.HashMap;

public class Main{

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int m = sc.nextInt();
            int a = 0;
            HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();
            for(int i = 0; i < n; i++){
                a = sc.nextInt();
                if(!hm.containsKey(a)){
                    hm.put(a,1);
                }else{
                    hm.put(a,hm.get(a) + 1);
                }
            }
            for(int i = 0; i < m; i++){
                int ask = sc.nextInt();
                if(hm.containsKey(ask)){
                    System.out.println(hm.get(ask));
                }else{
                    System.out.println(0);
                }
            }
        }
        sc.close();
    }

}

发表于 2020-08-10 15:01:23 回复(0)
在python中简单使用count会导致超时,此处应生成dict,然后查找。
n,m=[int(s) fors ininput().split()]
salary=[int(s) fors ininput().split()]
fori inrange(m):
    quest=int(input())
    print(salary.count(quest))
发表于 2020-04-04 05:28:59 回复(0)
n,m = map(int,input().split())
list1 = list(map(int,input().split()))
list2 = []
for i in range(m):
    list2.append(int(input()))

for i in list2:
    print(list1.count(i))
发表于 2020-03-07 15:09:44 回复(0)
#include <iostream>
#
include<map>
using namespace std;

int mum[80000];
int main()

{
   int n,m;
   cin>>n>>m;
   map<int,int> ma;
   while(n--){
     int a;
     cin>>a;
     ma[a]++;
   }
   for(int i=0;i<m;i++){
    cin>>mum[i];
    cout<<ma[mum[i]]<<endl;
   }
    return 0;
}

发表于 2020-02-26 11:41:03 回复(0)
nn = input()
nn = nn.split(" ")
people = int(nn[0])
ask = int(nn[1])
s = input()
s = [int(i) for i in s.split(" ")]
sal_dict = {}
for i in s:
    if i not in sal_dict.keys():
        sal_dict[i] = 1
    else:
        sal_dict[i]+=1
while ask>0:
    a = input()
    if int(a) not in sal_dict.keys():
        print(0)
    else:
        print(sal_dict[int(a)])
    ask -=1

发表于 2020-02-17 10:11:29 回复(0)
import random
n=int(input('n:'))
m=int(input('m:'))
dict={}  for i in range(1,n):
    money=random.randint(1,10**4)  if money not in dict:
        dict[money]=money  else:
        dict[money]+=money  for i in range(m):
    k=input('k:')  print(dict.get(m))  exit()

编辑于 2020-02-05 13:02:26 回复(0)
n, m = map(int, input().split())
moneys = list(map(int, input().split()))
for i in range(m):
    a = int(input())
    print(moneys.count(a))

发表于 2020-01-03 20:10:47 回复(0)