Java 算法:随机抽题

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Java 算法:随机抽题

文章目录

      • 问题
      • 解决方案
      • 算法思路
      • 示例代码
      • 注意事项

在这里插入图片描述

问题

给定试题的难度数量(简单、普通、困难)和试题类型数量(单选、多选、判断),以及题库中各种类型的题有多少道,求能否随机抽题。

解决方案

首先,我们可以使用一个数组来存储题库中的各种类型的题目数量。然后,我们可以使用一个Map来存储每种类型的题目数量对应的难度数量。

想要实现的是一个随机抽题算法,该算法需要满足以下条件:

  • 给定试题类型数量(单选、多选、判断)和难度数量(简单、普通、困难)。

  • 给定题库中各种类型和难度的题的数量。

  • 判断是否能够按照给定的数量随机抽取题目。

  • 如果可以抽取,确定每种类型的题目各抽几道。

  • 不能使用超过3层的for循环,以保证算法效率。

首先,我们来分析您提供的代码和需求:

  • 您提供的代码中定义了试题类型和难度数量的数组types和ratios,以及题库中各种类型和难度的题的数量。

  • 代码中包含了初步校验试题数量是否满足的逻辑。

  • 您要求的算法需要在不使用超过3层for循环的情况下,判断是否能随机抽题,并给出每种类型的题目数量。

接下来,我将提供一个简化的算法思路和示例代码,以满足您的需求。

算法思路

校验题库数量是否满足需求:遍历每种类型和难度,检查题库中的数量是否满足types和ratios数组的要求。

随机抽题:如果题库数量满足需求,使用一个有效的方法(例如回溯法或贪心算法)来随机抽取题目,同时保证每种类型的题目数量符合要求。

假设题库中的各种类型的题目数量为:

类型数量
单选10
多选20
判断30
简答40
分析50

那么,输出结果将是:

  • 简单题目:10 普通题目:30 困难题目:60

示例输入:

  • 题库中的各种类型的题目数量
  • 每种类型的题目数量对应的难度数量

示例输出:

  • 随机抽题结果

示例代码

import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class TestRandom {public static void main(String[] args) {int[] types = {2, 2, 2}; // 单选、多选、判断int[] ratios = {2, 3, 1}; // 简单、普通、困难int singleEasyList = 1;int singleNormalList = 2;int singleHardList = 1;int multiEasyList = 1;int multiNormalList = 2;int multiHardList = 1;int judgeEasyList = 1;int judgeNormalList = 1;int judgeHardList = 0;// 校验题库数量是否满足需求if (!isSatisfy(types, ratios, new int[]{singleEasyList, singleNormalList, singleHardList, multiEasyList, multiNormalList, multiHardList, judgeEasyList, judgeNormalList, judgeHardList})) {System.out.println("题库数量不满足需求");return;}// 随机抽题List<Integer> result = drawQuestions(types, ratios, new int[]{singleEasyList, singleNormalList, singleHardList, multiEasyList, multiNormalList, multiHardList, judgeEasyList, judgeNormalList, judgeHardList});System.out.println("抽题结果:" + result);}private static boolean isSatisfy(int[] types, int[] ratios, int[] questionCounts) {for (int i = 0; i < types.length; i++) {int typeCount = 0;for (int j = 0; j < questionCounts.length; j += 3) {typeCount += questionCounts[j + i];}if (typeCount < types[i]) {System.out.println("类型" + (i + 1) + "题数量不足");return false;}}for (int i = 0; i < ratios.length; i++) {int ratioCount = 0;for (int j = i; j < questionCounts.length; j += 3) {ratioCount += questionCounts[j];}if (ratioCount < ratios[i]) {System.out.println("难度" + (i + 1) + "题数量不足");return false;}}return true;}private static List<Integer> drawQuestions(int[] types, int[] ratios, int[] questionCounts) {Random random = new Random();List<Integer> result = new ArrayList<>();int index = 0;for (int type : types) {for (int i = 0; i < type; i++) {result.add(index);}index++;}for (int ratio : ratios) {for (int i = 0; i < ratio; i++) {result.add(index + random.nextInt(3 - i));}index += 3;}return result;}
}

注意事项

  • 这个示例代码是一个简化的版本,它假设题库数量满足需求,并且使用了一个简单的随机抽题方法。

  • 实际应用中,您可能需要根据题库的具体数据和需求,调整算法以满足更复杂的抽题逻辑。

  • 为了提高效率,可以考虑使用更高级的数据结构和算法,如动态规划、回溯法等。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/423597.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

W外链怎么做微信推广链接?

"W外链"通常指的是一种可以创建短链接或者特殊功能的链接服务&#xff0c;这些链接可以用来在微信等社交平台上进行推广。由于微信对直接链接分享有一定的限制&#xff0c;使用这类服务可以帮助绕过这些限制&#xff0c;从而实现更有效的推广。 以下是使用W外链创建微…

Mysql JSON结果不能IN

开发中遇到这样一种场景&#xff0c;举例说音乐的专辑包含歌曲&#xff0c;假设歌曲放在music表&#xff0c;专辑放在album表&#xff0c;而专辑与歌曲的绑定关系&#xff0c;要么就存一个关联表music_ablum&#xff0c;要么就存一个json字段(music_list)在album表。 存一个关…

【Unity踩坑】使用Input System后UI EventSystem的冲突

在项目中使用Input System&#xff0c;在UI中添加了元素后&#xff0c;再次运行出现下面的错误&#xff1a; InvalidOperationException: You are trying to read Input using the UnityEngine.Input class, but you have switched active Input handling to Input System pac…

关于 vue/cli 脚手架实现项目编译运行的源码解析

1.vue项目运行命令解析 在日常开发中&#xff0c;vue 项目通过vue-cli-service脚手架包将项目运行起来&#xff0c;常用的命令例如&#xff1a; npm run serve npm run build 上述执行命令实际一般对应为项目中 package.json 文件的 scripts属性中编写的脚本命令&#xff0c;在…

亚马逊、沃尔玛、敦煌网、Target塔吉特、Temu环境搭建测评技术!

海外跨境电商各大主要平台正不断力推半托管模式&#xff0c;不断对商家开出众多吸引和扶持政策。全托管是指电商平台全面负责店铺的运营&#xff0c;包括仓储、配送、售后等&#xff0c;而商家主要负责提供货品。半托管模式则基本由商家自主经营&#xff0c;平台只负责仓配物流…

延迟退休,如何影响程序员?

随着人们对长寿的期待增加&#xff0c;延迟退休的趋势逐渐成为了现实。而对于已经面临35岁危机的程序员们来说&#xff0c;延迟退休可能是一个更常见的问题。 可以对照速查一下&#xff0c;延迟法定退休年龄时间表公布&#xff0c;你什么时候能退休&#xff1f; 对照速查&…

单机快速部署开源、免费的分布式任务调度系统——Apache DolphinScheduler

本文主要为大家介绍Apache DolphinScheduler的单机部署方式&#xff0c;方便大家快速体验。 环境准备 需要Java环境&#xff0c;这是一个老生常谈的问题&#xff0c;关于Java环境的安装与配置期望大家都可以熟练掌握。 验证java环境 java -version 下载安装包并解压 使用wg…

SRT3D: A Sparse Region-Based 3D Object Tracking Approach for the Real World

基于区域的方法在基于模型的单目3D跟踪无纹理物体的复杂场景中变得越来越流行。然而&#xff0c;尽管它们能够实现最先进的结果&#xff0c;大多数方法的计算开销很大&#xff0c;需要大量资源来实时运行。在下文中&#xff0c;我们基于之前的工作&#xff0c;开发了SRT3D&…

低空经济火爆:先考个无人机飞行执照傍身

随着低空经济的火爆&#xff0c;考取无人机飞行执照成为了越来越多人的选择。这不仅是对自身技能的提升&#xff0c;更是对未来职业发展的有力支撑。以下是对考取无人机飞行执照相关信息的详细解析&#xff1a; 一、低空经济与无人机飞行执照的关联性 低空经济作为战略性新兴…

Apache DolphinScheduler 跨工作流复杂依赖功能详解

大家好&#xff0c;我叫高楚枫&#xff0c;来自阿里云 EMR 团队的开发工程师&#xff0c;同时也是 Apache DolphinScheduler 的 PMC 成员之一。 今天非常高兴能在这里和大家分享关于跨工作流复杂依赖的功能详解。 引言 在现代的数据处理和调度过程中&#xff0c;工作流的依赖…

城市治理如何提升效率?推荐搭建城市综合治理平台!

随着城市化的快速发展&#xff0c;城市治理面临着前所未有的挑战。交通拥堵、环境污染、公共安全等问题日益凸显&#xff0c;传统的治理模式已难以满足现代城市的需求。在这样的背景下&#xff0c;提升城市治理效率成为了一个亟待解决的问题。本文将探讨如何通过搭建城市综合治…

Linux下如何使用CMake实现动态库的封装与调用

一、动态库的封装 1.创建工程 首先创建一个qt工程&#xff08;这里我采用的是ui工程&#xff09; 这里选择Widget工程 名字取一个和动态库相关的即可&#xff0c;我这里取的UIDLL 这里选择CMake 这里我选择命名为Dynamic kits采用Qt 5.14.2 GCC 64bit&#xff0c;之后直接下一…

智慧人居视音频解决方案探究和技术实现

智慧人居技术背景 智慧人居是一种利用先进技术和智能化系统&#xff0c;旨在提升居住环境的舒适性、便捷性和安全性的新型居住模式。随着物联网、大数据、人工智能等技术的不断发展&#xff0c;智慧人居正朝着更加智能化、个性化、集成化的方向发展。 智慧人居通过集成各种智…

c/c++ *和后置++的优先级

有时不记得c/c里运算符的优先级&#xff0c;最简单的办法就是写一个测试程序&#xff0c;这样更能直接地了解&#xff0c;如下面这个简单的代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>int main(int argc, char *argv[]) …

代码随想录刷题day32丨动态规划理论基础,509. 斐波那契数, 70. 爬楼梯, 746. 使用最小花费爬楼梯

代码随想录刷题day32丨动态规划理论基础&#xff0c;509. 斐波那契数&#xff0c; 70. 爬楼梯&#xff0c; 746. 使用最小花费爬楼梯 1.动态规划理论基础 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题…

QT 串口上位机读卡显示

目录 一. QT创建工程 二. 软件更换图标 三. QT打包 一. QT创建工程 文件新建&#xff0c;选择创建一个桌面QT。 重命名RFID,并选择工程保存路径 RFID.pro QT core gui serialport #串行串口greaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET RFID TE…

GD - GDLink的接口引脚杜邦线接触不好,还是自己做一个转接头好些

文章目录 GD - GDLink的接口引脚杜邦线接触不好&#xff0c;还是自己做一个转接头好些概述笔记转接头使用时的连接关系转接头弄个壳子好些在转接头上&#xff0c;将线序转为自己板子SWD的防呆线序 转接头的2x5P线序和看到的GD-LINK2x5P接口相反END GD - GDLink的接口引脚杜邦线…

Xcode报错:Return from initializer without initializing all stored properties

Xcode报错&#xff1a;Return from initializer without initializing all stored properties,self used before all stored properties are initialized 我们自定义 init 方法&#xff0c;在 init 中直接赋值 Binding 会失败,但是直接赋值给Binding类型的变量却正常&#xff…

94 、k8s之rbac

一、rbac----安全机制 赋权机制 集群是按照用户名进行登录&#xff0c;按照项目名称进行命名空间的分类。 配电云主站------62天 8个人 高温补贴 一主2从 user pdyzz pdyzz -n pdyzz 资源空间 pod数量 1.1、k8s的安全机制&#xff1a; apiserver------>集群内和外…

HTML+CSS - 网页布局之网格布局

1. dispaly设置 display是 CSS 中用于设置元素的显示方式的属性。它决定了元素如何被渲染到页面上。不同的display值会改变元素的显示行为&#xff0c;包括布局、排版以及对其他元素的影响。 其中网格容器是最常用的几种方式之一&#xff0c;在文档中创建类似于网格的效果&…