我的算法基础实验代码-下篇

简介: 算法题目,Java语言版

第一题

题目介绍

输入一些数值,求出现的次数最多的数。如果有多个并列,则从==大到小输出。==

解题思路

代码实现

package com.nineWeek;

import java.util.*;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/5/7 18:29
 */

public class NumMostTimes {
   
   
    public static void main(String[] args) {
   
   
        Scanner scanner = new Scanner(System.in);
        Map<Integer, Integer> countMap = new HashMap<>();
        System.out.println("输入整数时,输入 # 表示输入完成");
        while (scanner.hasNextInt()) {
   
   
            int num = scanner.nextInt();
            int count = countMap.getOrDefault(num, 0);
            countMap.put(num, count + 1);
        }

        List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(countMap.entrySet());
        Collections.sort(entryList, ((o1, o2) -> {
   
   
            int cmp = o2.getValue() - o1.getValue();
            if (cmp == 0) {
   
   
                cmp = o2.getKey() - o1.getKey();
            }
            return cmp;
        }));
        int maxCount = entryList.get(0).getValue();
        for (int i = 0; i < entryList.size(); i++) {
   
   
            int count = entryList.get(i).getValue();
            if (count != maxCount) {
   
   
                break;
            }
            System.out.print(entryList.get(i).getKey() + " ");
        }
    }
}

第二题

题目介绍

编程生成一个N阶矩阵,使其主对角线右侧相邻上元素皆为1,与主对角线左侧相邻元素皆为2,其余元素皆为0.

解题思路

代码实现

package com.nineWeek;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/5/7 23:26
 */

public class generateMatrix {
   
   
    public static void main(String[] args) {
   
   
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] matrix =  generateMatrix(n);

        for (int i = 0; i < n; i++){
   
   
            for (int j = 0; j < n; j++){
   
   
                System.out.print(matrix[i][j]);
            }
            System.out.println();
        }
    }
    public static int[][] generateMatrix(int n) {
   
   
        int[][] matrix = new int[n][n];
        for (int i = 0; i < n; i++) {
   
   
            for (int j = 0; j < n; j++) {
   
   
                if (j == i + 1) {
   
   
                    matrix[i][j] = 1;
                } else if (j == i - 1) {
   
   
                    matrix[i][j] = 2;
                } else {
   
   
                    matrix[i][j] = 0;
                }
            }
        }
        return matrix;
    }
}

第三题

题目介绍

输入若干个单词,输出它们的平均长度。单词只包含大写字母和小写字母,用一个或多个空格隔开

解题思路

代码实现

package com.nineWeek;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/5/14 16:28
 */

public class WordCount {
   
   
    public static void main(String[] args) {
   
   
        String str;
        Scanner sc = new Scanner(System.in);
        str = sc.nextLine();
        System.out.println(getAverageWordLength(str));

    }
    public static double getAverageWordLength(String input) {
   
   
        String[] words = input.split("\\s+");
        int wordCount = words.length;
        int totalLength = 0;
        for (String word : words) {
   
   
            totalLength += word.length();
        }
        return ((double)totalLength) / wordCount;
    }
}

第四题

题目介绍

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

解题思路

代码实现

package com.nineWeek;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/5/14 16:35
 */

public class CharStatisticg {
   
   
    public static void main(String[] args) {
   
   
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一行字符串");
        String input = sc.nextLine();

        int letterCount = 0;
        int spaceCount = 0;
        int digitCount = 0;
        int otherCount = 0;

        for (int i = 0; i < input.length(); i++) {
   
   
            char c = input.charAt(i);
            if (Character.isLetter(c)){
   
   
                letterCount++;
            }else if (Character.isDigit(c)) {
   
   
                digitCount++;
            }else if(Character.isWhitespace(c)){
   
   
                spaceCount++;
            }else {
   
   
                otherCount++;
            }
        }

        System.out.println("字母个数 " + letterCount);
        System.out.println("数字个数 " + digitCount);
        System.out.println("空格个数 " + spaceCount);
        System.out.println("其他字符个数 " + otherCount);
    }
}

第五题

题目介绍

这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。显然,最少需要2个钱币才能凑成15元。
你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。

==【要求】==
【Input】
测试用例的第一行是待凑的钱数值M(1 <= M<= 2000,整数),接着的一行中,第一个整数K(1 <= K <= 10)表示币种个数,随后是K个互不相同的钱币面值Ki(1 <= Ki <=1000)。

【Output】
测试用例输出一行,即凑成钱数值M最少需要的钱币个数。如果凑钱失败,输出“Impossible”。你可以假设,每种待凑钱币的数量是无限多的。

【样例输入1】
15
6 2 5 10 20 50 100
【样例输出1】
2
【样例输入2】
1
1 2
【样例输出】
Impossible


解题思路

代码实现

package com.nineWeek;

import java.util.Arrays;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/5/14 16:54
 */

public class ScrapeTogetherMoney {
   
   

    public static void main(String[] args) {
   
   
        int[] coins = {
   
   6,2,5,10,20,50,100};
        int amount = 15;
        int minCoins = minCoins(coins, amount);
        System.out.println("Minimum number of coins required to make " + amount + " is: " + minCoins);
    }

    public static int minCoins(int[] coins, int target) {
   
   
        int[] dp = new int[target + 1];
        Arrays.fill(dp, Integer.MAX_VALUE);
        dp[0] = 0;
        for (int i = 1; i <= target; i++) {
   
   
            for (int coin : coins) {
   
   
                if (coin <= i && dp[i - coin] != Integer.MAX_VALUE) {
   
   
                    dp[i] = Math.min(dp[i], 1 + dp[i - coin]);
                }
            }
        }
        return dp[target] == Integer.MAX_VALUE ? -1 : dp[target];
    }
}

第六题

题目介绍

按照键盘输入的数值N的大小,打印如下图形
打印的棱形图案实例

N为图形的行数。要求使用循环实现。

【Input】
显示的行数

【Output】
对应图形。

【样例输入:】
9(如图)

解题思路

代码实现

package com.sixWeek;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/1 17:14
 */

public class Algo_6 {
   
   
    public static void main(String[] args) {
   
   
        /**
         * 打印指定行数棱形图案
         */

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入图案行数");
        int n = sc.nextInt();
        int N = n / 2;
        System.out.println("输入要打印的字符");
        char ch = sc.next().charAt(0);

        for (int i = -N; i < (N + 1); i++) {
   
   
            int absN = Math.abs(i);
            //获取总行数和绝对值之间得差距,判断需要打印多少个指定字符
            int diff = N-absN;

            for (int j = -N; j < (N + 1); j++) {
   
   
                int absj = Math.abs(j);
                //将判断条件改成小于等于,可以打印实心得棱形
                if (absj == diff){
   
   
                    System.out.print(ch);
                }else {
   
   
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}

第七题

题目介绍

莫比乌斯函数,使用miu(n) 作为莫比乌斯函数的记号。具体定义如下:如果一个数包含平方因子,那么miu(n) = 0。例如:miu(4), miu(12), miu(18) = 0。如果一个数不包含平方因子,并且有k个不同的质因子,那么miu(n) = (-1)^k。例如:miu(2), miu(3), miu(30) = -1,miu(1), miu(6), miu(10) = 1。给出一个数n, 计算miu(n)。

解题思路

代码实现

package com.nineWeek;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/5/14 21:18
 */

public class Mobius {
   
   
    public static void main(String[] args) {
   
   
        int n;
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        System.out.println(miu(n));
    }

    public static int miu(int n) {
   
   
        int count = 0;
        for (int i = 2; i * i <= n; i++) {
   
   
            if (n % (i * i) == 0) {
   
   
                // 包含平方因子,直接返回 0
                return 0;
            }
            if (n % i == 0) {
   
   
                count++;
                n /= i;
                while (n % i == 0) {
   
   
                    n /= i;
                    count++;
                }
            }
        }
        if (n > 1) {
   
   
            // 处理最后一个质因子
            count++;
        }
        return (count % 2 == 0) ? 1 : -1;
    }
}
目录
相关文章
|
2月前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
255 1
|
27天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
12天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
18 3
|
12天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
15 3
|
12天前
|
算法
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
32 1
|
12天前
|
算法
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
22 1
|
16天前
|
存储 机器学习/深度学习 算法
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
19 1
|
16天前
|
存储 算法 C语言
上机实验四 图的最小生成树算法设计 西安石油大学数据结构
上机实验四 图的最小生成树算法设计 西安石油大学数据结构
22 1
|
22天前
|
算法 安全 Java
java代码 实现AES_CMAC 算法测试
该代码实现了一个AES-CMAC算法的简单测试,使用Bouncy Castle作为安全提供者。静态变量K定义了固定密钥。`Aes_Cmac`函数接受密钥和消息,返回AES-CMAC生成的MAC值。在`main`方法中,程序对给定的消息进行AES-CMAC加密,然后模拟接收ECU的加密结果并进行比较。如果两者匹配,输出&quot;验证成功&quot;,否则输出&quot;验证失败&quot;。辅助方法包括将字节转为16进制字符串和将16进制字符串转为字节。
|
27天前
|
算法 调度 C++
[数据结构与算法]贪心算法(原理+代码)
[数据结构与算法]贪心算法(原理+代码)