第一题:从自动售货机取饮料,算价格
测试用例:
5 3 5代表有5个货物槽,3代表3个人
1 2 3 4 5 代表5个槽里每种饮料的价格
5 第一个人操作5次
left take 1 left、right代表左右手,take、return、keep代表取、放回去、放包里,take、return 后面的数字代表从哪里取,放回哪里(注意放回的货物槽和取出的可能不一样,因此价格会变)
right take 2
left return 3
right keep
right take 4
6
left take 5
right take 1
left return 2
right return 3
left take 5
left return 4
10
left take 1
left keep
left take 2
left keep
left take 3
left keep
left take 4
left keep
left take 5
left keep
第二题有人想做的话,欢迎留言,我会发出来。
1 2 3 4 5 代表5个槽里每种饮料的价格
5 第一个人操作5次
left take 1 left、right代表左右手,take、return、keep代表取、放回去、放包里,take、return 后面的数字代表从哪里取,放回哪里(注意放回的货物槽和取出的可能不一样,因此价格会变)
right take 2
left return 3
right keep
right take 4
6
left take 5
right take 1
left return 2
right return 3
left take 5
left return 4
10
left take 1
left keep
left take 2
left keep
left take 3
left keep
left take 4
left keep
left take 5
left keep
/** * 网易互娱软开第一题:从自动售货机里取饮料 * 不知道为啥scanner.next不能读取输入数据的最后一个字符串,随便往输入数据里加一个空格或者字符就能得到正确解了 * 思路很简单,就是用一个二维数组memo来模拟自动售货机,每一列代表货物槽,第0行代表初始价格,当有新价格时往下一行添加即可 * 取饮料时也将该行的价格变为0(如果不在第一行) * 再次求大佬解答一下为什么这里的scanner.next不能读取输入数据的最后一个字符串 * 我在其他地方都可以啊,感觉可能是系统把最后一个字符串当做空白符了,所以没有读出来,请问大家有没有解决的方法 * Scanner是一个扫描器,我们录取到键盘的数据,先存到缓存区等待读取,它判断读取结束的标示是 空白符;比如空格,回车,tab 等等。 * @author shkstart * @create 2020-09-05 17:15 */ import java.util.Scanner; public class Wangyi { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); while(in.hasNext()) { int n=in.nextInt(); int nums=in.nextInt(); int[] price=new int[n]; for(int i=0;i<n;i++) { price[i]=in.nextInt(); } int[][] memo=new int[100+1][n]; for(int i=0;i<n;i++) { memo[0][i]=price[i]; } for(int people=0;people<nums;people++) { int m=in.nextInt(); int bag=0,left=0,right=0; for(int j=0;j<m;j++) { String lr=in.next(); String op=in.next(); if(lr.equals("left")&&op.equals("take")) { int coco=in.nextInt(); for(int i=0;i<100;i++) { if(memo[i+1][coco-1]!=0) { continue; }else { left=memo[i][coco-1]; if(i!=0) { memo[i][coco-1]=0; } break; } } } else if(lr.equals("right")&&op.equals("take")) { int coco=in.nextInt(); for(int i=0;i<100;i++) { if(memo[i+1][coco-1]!=0) { continue; }else { right=memo[i][coco-1]; if(i!=0) { memo[i][coco-1]=0; } break; } } } else if(lr.equals("right")&&op.equals("keep")) { bag+=right; right=0; } else if(lr.equals("left")&&op.equals("keep")) { bag+=left; left=0; } else if(lr.equals("left")&&op.equals("return")) { int k=0; int loca=in.nextInt(); while(memo[k][loca-1]!=0){ k+=1; } memo[k][loca-1]=left; left=0; } else if(lr.equals("right")&&op.equals("return")) { int k=0; int loca=in.nextInt(); while(memo[k][loca-1]!=0){ k+=1; } memo[k][loca-1]=right; right=0; } } bag=bag+left+right; System.out.println(bag); } } } }
第二题有人想做的话,欢迎留言,我会发出来。
全部评论
(1) 回帖