美团内推笔试编程题:有5个人,编号1,2,3,4,5,裁判叫号叫到1,编号1蹲,叫到2,编号2,3蹲,叫到3,编号4,5,1蹲,以此类推;先选定一个人编号p,判断该人在每次叫号时蹲不蹲,蹲输出Y,不蹲输出N
思路:用两个int型记录应该下蹲的起始和末尾的编号,分别为m,n
1.当p>=m&&p<=n时,说明p在m,n之间
2.累次之后也就是叫号累加超过5了就会出现如:要4,5,1蹲的情况,此时p>=m&&p<=5或p>=0&&p<=n;
java代码如下:
1 package test; 2 import java.util.Scanner; 3 4 //有5个人,编号1,2,3,4,5,裁判叫号叫到1,编号1蹲,叫到2,编号2,3蹲,叫到3,编号4,5,1蹲,以此类推 5 public class UpAndDown { 6 public static void Down(int p,int[] a){ 7 int sum =0; 8 for(int i=0;i<a.length;i++){ 9 int m = (sum+1+5)%5; 10 //有可能出现m为0的情况,但m不可能为0,此时m应该是5,所以特殊处理,n同理 11 if(m==0) 12 m=5; 13 int n = (sum+a[i])%5; 14 if(n==0) 15 n=5; 16 sum+=a[i]; 17 if(m<=n){ 18 if(p>=m&&p<=n){ 19 System.out.println("Y"+" "); 20 }else{ 21 System.out.println("N"+" "); 22 } 23 }else{ 24 if((p>=m&&p<=5)||(p>=0&&p<=n)){
25 System.out.println("Y"+" "); 26 }else{ 27 System.out.println("N"+" "); 28 } 29 } 30 31 } 32 } 33 34 public static void main(String[] args) { 35 // TODO Auto-generated method stub 36 Scanner in=new Scanner(System.in); 37 int p=in.nextInt(); 38 int q=in.nextInt(); 41 int [] a=new int[q]; 42 for (int i = 0; i < q && in.hasNext(); i++) { 43 a[i] = in.nextInt(); 44 } 45 // in.close(); 46 Down(p,a); 47 // in.close(); 48 } 49 50 }
运行结果:
3 6 1 2 3 4 4 3 N Y N Y Y N