目录
1. 用数组写水仙花数 ★
2. 外出采摘的日本人 ★★
3. 插入、删除和获取随机元素 ★★★
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
定义一个整型数组 a[7],在控制台输入任意的 7 个整数给数组赋值,输出数组中所有的“水仙花数”。
“水仙花数”是指一个三位数其各位数字的立方和等于该数本身。
代码:
import java.util.Scanner;
public class Test {public static void main(String[] args) {Scanner in = new Scanner(System.in);int arr[] = new int[7];System.out.println("请输入7个三位数:");for (int i = 0; i < arr.length; i++) {arr[i] = in.nextInt();}System.out.println("数组中的水花仙数为:");for (int i = 0; i < arr.length; i++) {int x = arr[i] / 100;int y = arr[i] / 10 % 10;int z = arr[i] % 10;if (arr[i] == x * x * x + y * y * y + z * z * z)System.out.println(i);}}
}
二战后的某一天,N个日本人来到了一个山洞休息,为了派出一个日本人去外面充满危险的丛林中采摘食物,他们设置如下游戏产生外出采摘的人:
1、首先,所有参加游戏的日本人按顺序编号为1、2、3…N;
2、接下来每个日本人心里产生一个数字,这个数字称为序号为 N的人的密码P;
3、所有参加游戏的人按照编号站成一个圈,长老为游戏设置初始密码K,从编号为 1的人开始报数,报到 K的人退出队伍,然后将自己心中的密码P说出来,由下一个人继续从 1开始报数,报到P的人退出队伍,以此类推;
4、当队伍中剩下一个人的时候,这个人就是今天要出去采摘的日本人,他可能回不来了!
请各位同学设计程序并使用Java语言实现改程序,在用户输入了人数N、每个人的密码P和初始密码K的情况下,自动完成上面的选择过程,输出先后离开队伍的人的序号序列,最后输出要去采摘的日本人,输出他的编号。
代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class JosephCircle {public int newJoseph(int n, int[] p, int k) {List num = new ArrayList();for (int i = 0; i < n; i++)num.add(i);int t = k, index = 0;for (int i = 0; i < n - 1; i++) {index = (index + t) % num.size();num.remove(index);t = p[index];if (index == num.size())index = 0;}return num.get(0) + 1;}public int oldJoseph(int n, int k) {int w = 0;for (int i = 2; i <= n; i++) {w = (w + k) % i;}return w;}public static void main(String[] args) {JosephCircle jc = new JosephCircle();Scanner scan = new Scanner(System.in);int n, k;int[] p = new int[100];System.out.print("Enter N = ");n = scan.nextInt();System.out.print("Enter P[] = ");for (int i = 0; i < n; i++) {p[i] = scan.nextInt();}System.out.print("Enter K = ");k = scan.nextInt();System.out.println();System.out.println("Survivor is No." + jc.newJoseph(n, p, k));}
}
设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构。
注意: 允许出现重复元素。
insert(val)
:向集合中插入元素 val。remove(val)
:当 val 存在时,从集合中移除一个 val。getRandom
:从现有集合中随机获取一个元素。每个元素被返回的概率应该与其在集合中的数量呈线性相关。示例:
// 初始化一个空的集合。 RandomizedCollection collection = new RandomizedCollection();
// 向集合中插入 1 。返回 true 表示集合不包含 1 。 collection.insert(1);
// 向集合中插入另一个 1 。返回 false 表示集合包含 1 。集合现在包含 [1,1] 。 collection.insert(1);
// 向集合中插入 2 ,返回 true 。集合现在包含 [1,1,2] 。 collection.insert(2);
// getRandom 应当有 2/3 的概率返回 1 ,1/3 的概率返回 2 。 collection.getRandom();
// 从集合中删除 1 ,返回 true 。集合现在包含 [1,2] 。 collection.remove(1);
// getRandom 应有相同概率返回 1 和 2 。 collection.getRandom();
代码:
class RandomizedCollection {private Map> map;private List list;private Random random;private int size = 0;public RandomizedCollection() {map = new HashMap<>();list = new ArrayList<>();random = new Random();}public boolean insert(int val) {if (map.containsKey(val)) {Set indexes = map.get(val);list.add(size, val);indexes.add(size);size++;return false;} else {Set indexes = new HashSet<>();map.put(val, indexes);list.add(size, val);indexes.add(size);size++;return true;}}public boolean remove(int val) {if (!map.containsKey(val)) {return false;}Set indexes = map.get(val);if (list.get(size - 1) == val) {indexes.remove(size - 1);size--;} else {Iterator it = indexes.iterator();int index = it.next();it.remove();int last = list.get(size - 1);list.set(index, last);Set set = map.get(last);set.remove(size - 1);set.add(index);size--;}if (indexes.size() == 0) {map.remove(val);}return true;}public int getRandom() {return list.get(random.nextInt(size));}
}
/*** Your RandomizedCollection object will be instantiated and called as such:* RandomizedCollection obj = new RandomizedCollection();* boolean param_1 = obj.insert(val);* boolean param_2 = obj.remove(val);* int param_3 = obj.getRandom();*/
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
![]() | Golang每日一练 专栏 |
![]() | Python每日一练 专栏 |
![]() | C/C++每日一练 专栏 |
![]() | Java每日一练 专栏 |