四道算法题,2个小时。
1.判断线段是否在线段内
题意:给出几组线段,判断是否有线段在另外的线段内。
如输入
3
1 2
2 3
3 4
则输出false
如输入
2
1 2
0 4
则输出true,12在04内
参考思路
好像在LeetCode上有类似的题目
用了比较暴力的做法,双重循环判断线段是否在线段内
2. 扑克牌游戏
小明小红玩扑克牌游戏,这边假设牌用整形表示,两人的卡组数量固定为n,且只能按顺序出牌。小明先出牌,当出牌人的牌和已有的牌相同时,可以回收至相同的牌(包括相同的牌),并且需要再出一张。
当双方都没有牌时,游戏结束。若此时场上还有牌,则奇数的归小明,偶数的归小红。输出小明和小红分别回收了几张牌?
如输入
2
1 1
2 2
则输出3 1。解释,小明先放了1,小红再放2,小明再放1,和之前的1相同,回收这三张,最后小红放2,双方都没牌了,场上只剩2,归小红。
如输入
4
1 2 3 4
5 6 7 8
则输出4 4。解释,最后各自从场上回收,小明收了1,3,5,7。小红收了2,4,6,8。
参考思路
简单模拟,根据题意分别放牌,然后判断是否要收牌。可以用List存储两人的卡组,再用一个List存储场上的牌
3.无限集合
题意:判断一个数是否属于一个无限集合。无限集合的定义是,给定一个初始值A,对于这个集合中的元素X,所有X+B也属于这个无限集合,所有X*C也属于这个集合。
输入A B C Q,问Q是否属于这个无限集合。
输入举例:
2 3 2 10
输出true。因为(2+3)*2=10。
输入
3 3 3 7
输出false,不管怎样转换,没法得到7。
4.最大乘积
给定0-9的数字的数量(至少有2个数),组成两个数相乘,求最大乘积
输入举例:
0 4 0 0 0 0 0 0 0
输出
121。解释:给了4个1,那么最大乘积应该是11*11
输入举例:
2 3 0 1 0 0 0 0 0
输出
34100。解释:最大应该是3100*11