4.8链家笔试

1.开关灯问题

题目描述:在小红家里,有n组开关,触摸每个开关,可以使得一组灯泡点亮。
现在问你,使用者n组开关,最多能够使得多少个灯泡点亮?
输入:第一行一个n,表示有n组开关。
接下来n行,每行第一个整数为k,表示这个开关控制k个灯泡,接下来k个整数,表示控制的灯泡序号。
满足:
1<=n<=1000
1<=k<=1000
序号是在int范围内正整数。
输出:
输出最多多少个灯泡点亮。

示例:
输入:
3
1 1
1 3
2 1 2
输出:
2

package org.buptdavid.datastructure.array;

import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

/**
 * 开关灯
 * Created by ZD on 2018/4/8.
 */
public class Main_L1 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();//n组开关
        Set set = new TreeSet();//使用set存储开关序号
        if (n <= 1000 && n >= 1){
           for (int i = 0; i < n; i++){
               int k = sc.nextInt();
               for (int j = 0; j < k; j++){
                   set.add(sc.nextInt());
               }
           }
        }
        System.out.println(set.size());
    }
}

2.三角形问题

题目描述:在迷迷糊糊的大草原上,小红捡到了n根木棍,第i根木棍的长度为i,小红现在很开心。她想选出其中的三根木棍组成美丽的三角形。
但是小明想捉弄小红,想去掉一些木棍,使得小红任意选三根木棍都不能组成三角形,请问小明最少去掉多少根木棍?
输入:
本题包含若干组测试数据。
对于每一组测试数据
第一行一个n,表示木棍的数量
满足1<=n<=100000
输出:
输出最少数量
示例:
输入:
4
输出:
1

package org.buptdavid.datastructure.array;

import java.util.Scanner;
import java.util.Stack;

/**
 * Created by ZD on 2018/4/8.
 */
public class Main_L2 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();//木棍数
        while (sc.hasNext()) 
            removeClub(n);

    }

    /**
     * 移除木棍
     * @param n
     */
    private static void removeClub(int n) {
        if (n < 1 || n > 100000)
            return;
        int count = 0;
        if (n <= 3) {
            System.out.println(0);
            return;
        }
        Stack<Integer> s = new Stack();
        s.push(1);
        s.push(2);
        s.push(3);
        for (int i = 4; i <= n; i++){
            int m =  s.pop();
            int k =  s.pop();
            int sum = m + k;
            s.push(k);
            s.push(m);
            while (sum > i && i <= n){
                count++;
                i++;
            }
            i = sum;
            s.push(i);

        }
        System.out.println(count);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值