首页 > 试题广场 >

投篮游戏

[编程题]投篮游戏
  • 热度指数:12626 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个投篮游戏。球场有p个篮筐,编号为0,1...,p-1。每个篮筐下有个袋子,每个袋子最多装一个篮球。有n个篮球,每个球编号xi 。规则是将数字为xi 的篮球投到xi 除p的余数为编号的袋里。若袋里已有篮球则球弹出游戏结束输出i,否则重复至所有球都投完。输出-1。问游戏最终的输出是什么?

输入描述:
第一行两个整数p,n(2≤p,n≤300)。p为篮筐数,n为篮球数。接着n行为篮球上的数字xi(0≤xi≤1e9)


输出描述:
输出游戏的结果
示例1

输入

10 5
0
21
53
41
53

输出

4
import java.util.*;
 
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            int end = -1;
            int p = in.nextInt();
            int n = in.nextInt();
            int[] x = new int[n];
            for(int i = 0;i < n;i++){
                x[i] = in.nextInt();
            }
            int[] judge = new int[p];
            
            for(int i = 0;i < n;i++){
                if(judge[x[i] % p] == 1){
                    end = i + 1;
                    break;
                }
                else
                judge[x[i] % p] = 1;
                          
            }
                System.out.println(end);
            }
        }
    }
此题要点是要标记已装球的袋子的状态,程序中我用‘0’代表未装,‘1’代表已装。每一次装球前都要做出判断,如果为0则继续重复操作,如果为1则返回球的位标(注意循环的时候是以0开始的,所以位标应该加1),然后退出循环。假设碰巧每次装的袋子都是空的,那么所有球都装完了就返回-1。

发表于 2017-03-27 21:01:11 回复(0)
 import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int p = sc.nextInt();
            int n = sc.nextInt();
            sc.nextLine();
            int[] ball = new int[n];
            for(int i=0;i<n;i++){
                ball[i]=Integer.parseInt(sc.nextLine().split(" ")[0]);
            }
            int[] basket =new int[p];
            int res=-1;
            for(int i=0;i<ball.length;i++){
                int index = ball[i]%p;
                if(basket[index]==1){
                    res = i+1;
                    break;
                }
                basket[index]=1;
            }
            System.out.println(res);
        }
    }
}

编辑于 2017-03-03 13:14:37 回复(0)
import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			int p = sc.nextInt();
			Map<Integer, Integer> map = new HashMap<Integer, Integer>();
			for (int i = 0; i < p; i ++ ) {
				map.put(i, 0);
			}
			int n = sc.nextInt();
			int[] arr = new int[n];
			for (int i = 0; i < n; i ++ ) {
				arr[i] = sc.nextInt();
			}
			int res = - 1;
			for (int i = 0; i < n; i ++ ) {
				int num = arr[i] % p;
				if(map.get(num) == 1) {
					res = i + 1;
					break;
				}
				map.put(num, 1);
			}
			System.out.println(res);
		}
	}
}

发表于 2016-09-14 02:09:45 回复(0)
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int p = sc.nextInt();
            int n = sc.nextInt();
            int[] x = new int[n];
            for(int i = 0; i < n; i++){
                x[i] = sc.nextInt();
            }
            boolean[] flag = new boolean[p];
            
            int i;
            for(i = 0; i < n; i++){
                int index = x[i] % p;
                if(flag[index] == true){
                    System.out.println(i+1);
                    break;
                }
                flag[index] = true;
            }
            
            if(i == n)
                System.out.println(-1);
        }
    }
}
发表于 2016-09-06 16:55:59 回复(0)