首页 > 试题广场 > 俄罗斯方块
[编程题]俄罗斯方块
小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块。因为它比较古老,所以规则和一般的俄罗斯方块不同。
荧幕上一共有 n 列,每次都会有一个 1 x 1 的方块随机落下,在同一列中,后落下的方块会叠在先前的方块之上,当一整行方块都被占满时,这一行会被消去,并得到1分。
有一天,小易又开了一局游戏,当玩到第 m 个方块落下时他觉得太无聊就关掉了,小易希望你告诉他这局游戏他获得的分数。

输入描述:
第一行两个数 n, m
第二行 m 个数,c1, c2, ... , cm , ci 表示第 i 个方块落在第几列
其中 1 <= n, m <= 1000, 1 <= ci <= n


输出描述:
小易这局游戏获得的分数
示例1

输入

3 9
1 1 2 2 2 3 1 2 3

输出

2
 //这道题的思路很简单,N列,就定义一个1*N的数组,每一列落下方块时,对应数组位置+1,最后取数组的最小值就可以了

#include<iostream>
#include<vector>

using namespace std;

int minV(vector<int> v)
{
    int min = v[0];
    for (int i = 1; i < v.size(); i++)
    {
        if (v[i] < min)
            min = v[i];
    }

    return min;
}

int main()
{
    int n, m;
    while (cin >> n >> m)
    {
        vector<int> vec(n, 0);//定义n*1的数组

        for (int i = 0; i < m; i++)
        {
            int input;
            cin >> input; //落下方块的位置
            vec[input - 1]++;//对应位置+1
        }
        cout << minV(vec) << endl; //输出数组的最小值
    }
    return 0;
}


发表于 2018-08-14 10:42:15 回复(3)
// 超简洁哦,只需把m的值在长度为n的数组上自增就好啦,然后通过sort()取最短的数

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < m; i++) {
            arr[scanner.nextInt() - 1]++;
        }
        Arrays.sort(arr);
        System.out.println(arr[0]);
    }
}


发表于 2018-08-27 15:51:26 回复(3)
n, m = map(int, raw_input().split())

a = [0 for i in range(n)]

c = map(int, raw_input().split())

for i in c :
    a[i-1] += 1
    pass

print min(a)
发表于 2019-07-20 07:53:44 回复(2)

Java

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();
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < m; i++) {
            int num = sc.nextInt();
            if (!map.containsKey(num)) {
                map.put(num, 1);
            } else {
                map.put(num, map.get(num) + 1);
            }
        }
        int min = Integer.MAX_VALUE;
        if (map.size() == n) {
            for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
                if (entry.getValue() < min) {
                    min = entry.getValue();
                }
            }
        } else {
            min = 0;
        }
        System.out.println(min);
    }
}
发表于 2019-06-30 13:51:10 回复(0)

JavaScript

let line1=readline().split(' '),
    line2=readline().split(' '),
    n = line1[0],
    m = line1[1],
    count = new Array(parseInt(n)).fill(0);
for(let i=0;i<m;i++){
    count[line2[i]-1]++;
}
console.log(Math.min(...count));
发表于 2019-08-01 00:51:54 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main(){
    int n, m, x;
    cin>>n>>m;
    int a[n+1];
    memset(a, 0, sizeof(a));
    for(int i=0;i<m;i++){
        cin>>x;
        a[x]++;
    }
    int Min = INT_MAX;
    for(int i=1;i<=n;i++)
        Min = min(Min, a[i]);
    cout<<Min<<endl;
    return 0;
}

发表于 2019-07-26 11:45:35 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int m,n,c[1001];
    cin>>n>>m;
    map<int,int>mp;
    for(int i=0;i<m;i++)
    {
        cin>>c[i];
        mp[c[i]-1]++;
    }
    int res=m;
    for(int i=0;i<n;i++)
        res=res<mp[i]?res:mp[i];
    cout<<res;
    return 0;
}

发表于 2019-06-29 21:00:59 回复(0)
var line1 = readline().split(' ');
var cols = parseInt(line1[0]);
var blocks = parseInt(line1[1]);

var colsOfBlockArr = readline().split(' ');

function getRows(cols, colsOfBlockArr) {
    let count = 10000;
    for (let i = 0; i < cols; i += 1) {
        let colCount = colsOfBlockArr.filter(col => +col === (i + 1)).length; // 每列个数
        if (colCount < count) {
            count = colCount;
        }
    }
    return count;
}

print(getRows(cols, colsOfBlockArr));

发表于 2018-12-02 17:44:08 回复(0)
importjava.util.Scanner;
 
publicclassMain {
 
    publicstaticvoidmain(String[] args) {
        // 很简单的一题,时间复杂度O(m+n),空间复杂度O(m+n),对应位数自增取最小值
        Scanner sc = newScanner(System.in);
        intn=sc.nextInt(),m=sc.nextInt();
        int[] nx = newint[n];
        int[] num = newint[m];
        for(inti = 0; i < m; i++) {
            num[i] = sc.nextInt();
            nx[num[i]-1]++;
        }
        intMIN = 1001;
        for(inti = 0; i < n; i++) {
            MIN = nx[i]<MIN?nx[i]:MIN;
        }
        System.out.println(MIN);
    }
 
}

发表于 2018-08-24 10:16:43 回复(0)
#include <bits/stdc++.h>
#include <vector>
using namespace std;

int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    vector<int> ver(n,0);
    for(int i =0;i<m;++i)
    {
        int te;
        scanf("%d",&te);
        ver[te-1]+=1;
    }
//    for(int i=0;i<n;++i)
//        printf("%d ",ver[i]);
    vector<int>::iterator small = min_element(begin(ver),end(ver));
    printf("%d",*small);
    return 0;
}

发表于 2018-08-16 17:34:51 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        /* code */
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int[] count = new int[n];
        while(m > 0){
            int test = in.nextInt();
            for(int i = 1; i <= n; i++){
                if(test == i){
                    count[i-1]++;
                }
            }
            m--;
        }
        int score = count[0];
        for(int i = 1; i < n; i++){
            if(count[i] < score){
                score = count[i];
            }
        }
        System.out.println(score);
    }
}
发表于 2018-08-14 16:08:56 回复(2)
import java.util.*;
public class Main {
    static int cell(ArrayList<Integer>list,int n){
        if(list.size()<n){
            return 0;
        }
    Map<Integer,Integer>map=new HashMap<Integer,Integer>();
    for(int i=0;i<list.size();i++){
        if(map.containsKey(list.get(i))){
            map.put(list.get(i), map.get(list.get(i))+1);
        }else{
            map.put(list.get(i), 1);
        }        
    }
    if(map.size()<n){
        return 0;
    }                
        return Collections.min(map.values());
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
        int n = sc.nextInt();        
        int m = sc.nextInt();
        ArrayList<Integer>list=new ArrayList<Integer>();
        for(int i=0;i<m;i++){
            list.add(sc.nextInt());
           }
        System.out.println(cell(list,n));
        }
    }
}

发表于 2018-08-14 15:07:45 回复(0)
'''
思路: 送分题。创建一个长为n的list命名为record,遍历一遍A,
      将各个位置上加一,遍历结束后,最小值即为得分。
'''
 
# 读入数据
n,k =list(map(int, input().split()))
A =list(map(int, input().split())) # A = [a1,a2,a3,...an]
 
record =[0 for i in range(n)]
for i in A:
    record[i-1] +=1
print(int(min(record)))

编辑于 2018-08-14 21:56:19 回复(5)
#include<iostream>
using namespace std;
int main()
{
    int n, m, p, min;
    cin >> n >> m;
    int *v1 = new int[n] {0};//初始化数组中的值都为0;
    for (int i = 0; i<m; i++)
    {
        cin >> p;
        v1[p - 1]++;//这里是关键,遇到一个相同就加1;
    }
    min = v1[0];
    for (int i = 0; i<n; i++)
    {
        if (min>v1[i])
            min = v1[i];//最后将最少的那一格上积累的数输出就可以了
    }
    cout << min;
    return 0;
}
编辑于 2018-08-16 17:58:48 回复(0)
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

public class Main{
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n;
        int count=0;
        while(s.hasNext()){
            n = s.nextInt();
            int m;
            m = s.nextInt();
            ArrayList<Stack<Integer>> nlist = new ArrayList<>();
            for(int i=0;i<n;i++){
                nlist.add(new Stack<Integer>());
            }
            for(int i=0;i<m;i++){
                boolean flag = true;
                int number = s.nextInt();
                nlist.get(number-1).push(number);
                for(int j=0;j<n;j++){
                    if(nlist.get(j).size()<1){
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    for(int k=0;k<n;k++){
                        nlist.get(k).pop();
                    }
                    count++;
                }
            }
            System.out.println(count);
        }
    }
}
发表于 2018-08-15 11:45:24 回复(1)
import sys
n,m=list(map(int,sys.stdin.readline().split()))
arr=list(map(int,sys.stdin.readline().split()))
if len(set(arr))<n:
    print(0)
else:
    num=[]
    for i in arr:
        num.append(arr.count(i))
    print(min(num))

发表于 2019-08-13 15:53:58 回复(0)
n, m = list(map(int, input().split()))
cubes = list(map(int, input().split()))
cube_count = [0 for i in range(n)]
for cube in cubes:
    cube_count[cube - 1] += 1
print(min(cube_count))

发表于 2019-08-12 15:41:04 回复(0)
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    int n = 0, m = 0, temp_cross = 0, the_score = 0;
    cin >> n >> m;
    int *game_state = new int[n];
    memset(game_state, 0, n * sizeof(int));   //初始化全部为0
    for (int i = 0; i < m; i++)   //模拟落子
    {
        cin >> temp_cross;
        game_state[temp_cross - 1]++;
    }
    the_score = game_state[0];    //赋值为首位
    for (int i = 0; i < n; i++)     //冒泡一次最小
    {
        if (the_score > game_state[i])
        {
            the_score = game_state[i];
        }
    }
    cout << the_score;
    delete []game_state;
    return 0;
}

发表于 2019-08-03 20:02:10 回复(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 m = in.nextInt();
        intarr[] = newint[n];
        for(inti=0;i<m;i++){
            intt = in.nextInt();
            arr[t-1]++;
        }
        int min=m;
        for(int i=0;i<n;i++){
            if(arr[i]<min)
                min = arr[i];
        }
        System.out.print(min);
    }
}
发表于 2018-08-26 15:56:06 回复(0)
import java.util.Scanner;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int res[] = new int[n+1];//将荧幕宽设置为一个数组
        for(int i=0;i<m;i++)
            res[sc.nextInt()]++;//落在哪一列就加1
        Arrays.sort(res);
        System.out.println(res[1]);//找到最矮的那列
    }
}

发表于 2019-08-15 18:33:33 回复(0)

热门推荐

通过挑战的用户

查看代码