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);
}
}