首页 > 编程语言 >数组算法练习题

数组算法练习题

时间:2024-11-11 11:47:31浏览次数:6  
标签:练习题 int System students 算法 数组 println out

第一题:寻找锦鲤

  • 公司年会有一个寻找锦鲤的游戏,每一个员工随意写一个字,如果在“锦鲤”词库中有这个字,那么就奖励500元锦鲤红包,否则就没有,每人只能玩一次。现有锦鲤字库如下,它们按照Unicode编码值从小到大排序:char[] koiFishWords = {'一','今','地','定','年','开','我','果','火','爱','结','花','遍'};
解题思路:Scanner方法让用户从键盘输入一个要猜的数,因为数组char[] koiFishWord是按照Unicode编码值从小到大排序的,则可以通过二分查找判断要猜的数是否在锦鲤词库char[] koiFishWord中即可。
public static void main(String[] args) {
    char[] koiFishWords = {'一','今','地','定','年','开','我','果','火','爱','结','花','遍'};
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入要猜的字:");
    char word = sc.next().charAt(0);
    if(isKoi(koiFishWords,word)){
        System.out.println("恭喜你猜对了,你是锦鲤,获得500元锦鲤红包!!!");
    }else {
        System.out.println("很遗憾,你猜错了!!!");
    }
}
public static boolean isKoi(char []num,char word) {
    for (int left=0,right = num.length-1;left<right;) {
        int middle = (right+left)/2;
        if(num[middle] == word){
            return true;
        }else if(word > num[middle]){
            left = middle+1;
        }else{
            right= middle-1;
        }
    }
    return false;
}

第二题:绳子覆盖点

  • 直线上有n个点,数组a[0],a[1],...,a[n-1]存了每个点相对与后一个点的距离(最后一个点存储值为0),有一个长度为L的绳子放在直线上最多能覆盖多少个点?
解题思路:我们先定义一个长度为10的数组int []nums来记录绳子的每个点相对与后一个点的距离,通过Random方法来随机给数组赋值(注意,数组最后一个元素值为0),通过Scanner方法让用户从键盘输入一个绳子的长度,然后遍历数组,定义变量sum来记录数组元素累加值,比较绳子长度和sum,如果遍历到某一个点时,绳子的长度小于sum,则说明绳子不足与覆盖点后面的点,绳子最多能覆盖的点为当前元素下标加1。
 public static void main(String[] args) {
    int []nums = new int[10];
    Random rand = new Random();
    for (int i = 0; i < nums.length-1; i++) {
        nums[i] = rand.nextInt(10)+1;
    }
    System.out.println(Arrays.toString(nums));
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入绳子的长度:");
    int l = sc.nextInt();
    int sum = 0;
    for (int i = 0; i < nums.length; i++) {
        sum += nums[i];
        if (sum > l) {
            System.out.println("最多能覆盖"+(i+1)+"个点");
            break;
        }
    }
}

第三题:学生成绩统计

  • 需求:保存全班的每个组的成绩,并对成绩做统计,使用二维数组保存全班的每个组的成绩,从键盘输入一共有几组,从键盘输入每一组分别有多少人,从键盘输入每一个同学的成绩,并对成绩做如下统计:1:统计每一组的最高分、最低分。2:统计每一组的平均分。3:统计全班的最高分、最低分。4:统计全班的平均分。5:统计全班的总人数

解题思路:这个题关键在于二维数组,全局变量,和局部变量的使用。通过Scanner方法让用户从键盘输入共有几组人,再通过用户输入的数据n定义二维数组的第一维,然后遍历数字让用户输入每组的人数,通过用户输入的数据初始化数组第二维。此时数组已经初始化完成 ,再通过遍历数组让用户输入每组学生的成绩,即可拿到全部数据。分别定义以下全局变量:int classNum(记录全班人数),double classAvg(记录全班总分,最后除全班总人数即可得到平均分),int classMax(记录全班最高分),int classMin(记录全班最低分)。定义局部变量:int max(记录小组最高分),int min(记录小组最低分),double avg(记录小组总分,最后除小组总人数即可得到平均分)。遍历二维数组,对每个变量做对应的判断和操作即可。
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入共有几组");
        int n = sc.nextInt();
        int [][] students = new int[n][];
        for (int i = 0; i < n; i++) {
            System.out.println("请输入第"+(i+1)+"组有多少人");
            int num = sc.nextInt();
            students[i] = new int[num];
        }
        for (int i = 0; i < students.length; i++) {
            for (int j = 0; j < students[i].length; j++) {
                System.out.println("请输入第"+(i+1)+"组第"+(j+1)+"个人的成绩");
                students[i][j] = sc.nextInt();
            }
        }
        for (int i = 0; i < students.length; i++) {
            for (int j = 0; j < students[i].length; j++) {
                System.out.print(students[i][j]+" ");
            }
            System.out.println();
        }

        int classNum = 0;
        double classAvg = 0;
        int classMax = 0;
        int classMin = students[0][0];
        for (int j = 0; j < students.length; j++) {
            int max = students[j][0];
            int min = students[j][0];
            double avg = 0;
            for (int i = 0; i < students[j].length; i++) {
                if (max < students[j][i]) {
                    max = students[j][i];
                }if (min > students[j][i]) {
                    min = students[j][i];
                }if (classMax < students[j][i]) {
                    classMax = students[j][i];
                }if (classMin > students[j][i]) {
                    classMin = students[j][i];
                }
                avg += students[j][i];
                classAvg += students[j][i];
                classNum++;
            }
            System.out.println("第"+(j+1)+"组最高分为:"+max+",最低分为:"+min+",平均分为:"+(avg/students[j].length));
        }
        System.out.println("全班总人数为:"+classNum+"组最高分为:"+classMax+",最低分为:"+classMin+",平均分为:"+classAvg/classNum);

    }

标签:练习题,int,System,students,算法,数组,println,out
From: https://blog.csdn.net/2301_77830460/article/details/143675842

相关文章

  • [数组排序] 0384. 打乱数组
    文章目录1.题目大意2.题目大意3.示例4.解题思路5.参考代码1.题目大意384.打乱数组-力扣(LeetCode)2.题目大意描述:给定一个整数数组nums。要求:设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是等可能的。实现Solutionclass:Sol......
  • 算法性能测试基础
    算法的性能测试是一个综合评估算法在不同条件下的表现和效率的过程。在进行算法性能测试时,需要关注多个关键指标,以确保全面、准确地评估算法的性能。以下是对算法性能测试的详细解释和需要关注的指标的归纳:一、算法性能测试概述算法性能测试的目的是验证算法在各种输入情况下的......
  • C小题目:有一个一维数组score,放10个学生的成绩,求平均成绩。
    #include<stdio.h>intaverage(intx[],intlen){inti,sum=0;for(i=0;i<len;i++){sum+=x[i];printf("%d\n",x[i]);};inta=sum/len;printf("theaverageis%d\n",a);};intmain(){......
  • SQL练习题之统计连续登录七天的用户(开窗实现)
    4.(困难)统计连续登录七天(含七天)以上的用户(开窗和不开窗都要求实现)。SQL文件:user_sign.sql实现思路:#对日期排序,并用denserank开窗排序#对排序编号或日期的天去重,排除一天登录两次的情况#让日期与排序序号做差,如若连续,则差会相等#分组计数相同的差值#差值相等的大于等于......
  • 912. 排序数组
    题目链接本题使用的是快排解决。思路:「荷兰国旗」问题,具体思路跳转75.颜色分类代码classSolution{public:voidswap(vector<int>&nums,inti,intj){inttmp=nums[i];nums[i]=nums[j];nums[j]=tmp;}//[L,......
  • 关于我,穿越异世界,凭c语言搅动风云vlog----利用数组进行大数相关计算
    关于我,穿越异世界,凭c语言搅动风云vlog----利用数组进行大数相关计算一.有关大数你应该要知道的那些事1.大数的概念我们一般将计算机基本数据类型无法存储的数称之为大数,本文涉及的大数均为整数,不包含小数。而且下文代码实现中的数组大小可根据需要修改。2.问题引入在c......
  • 毕业设计:python考研院校推荐系统 混合推荐 协同过滤推荐算法 爬虫 可视化 Django框架(
    毕业设计:python考研院校推荐系统混合推荐协同过滤推荐算法爬虫可视化Django框架(源码+文档)✅1、项目介绍技术栈:Python语言MySQL数据库Django框架协同过滤推荐算法requests网络爬虫pyecharts数据可视化html页面、爬取院校信息:https://yz.chsi.com.cn/sch/(研招网......
  • 基于game-based算法的动态频谱访问matlab仿真
    1.算法运行效果图预览(完整程序运行后无水印)   展示了负载因子P和次级传输功率不同的HPE。         从图中可以看出,随着|hPE|²扩大,用户P更好的为二级用户分配更多的频谱机会,以便刺激二级用户传输更多的干扰功率,因此,导致ρ的减少和Psu的增加。 ......
  • 基于免疫算法的TSP问题求解matlab仿真
    1.程序功能描述旅行商问题(TravellingSalesmanProblem,TSP)是一个经典的组合优化问题,其目标是在给定一组城市及其相互之间的距离情况下,寻找一条经过每个城市恰好一次且返回起点的最短回路。TSP因其NP完全性及广泛应用背景而备受关注。免疫算法(ImmuneAlgorithm,IA),作为......
  • 操作系统调度算法
    操作系统使用各种算法来有效地调度处理器上的进程。调度算法的目的最大CPU利用率公平分配CPU最大吞吐量最短周转时间最短的等待时间最短响应时间有以下算法可用于计划作业。1.先来先服务这是最简单的算法。最短到达时间的过程将首先获得CPU。到达时间越少,进程得到CPU的......