java经典算法40题(一)
java 经典笔试算法题
java 经典笔试算法题一、排序算法1. 实现一个基于Java的快速排序算法。
答:快速排序是一种常用的排序算法,其核心思想是分治法。
首先选择一个基准元素,将数组分成两部分,一部分小于基准元素,一部分大于基准元素。
然后递归地对这两部分继续进行快速排序,直到整个数组有序。
2. 实现一个稳定的冒泡排序算法。
答:冒泡排序是一种简单的排序算法,通过重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
稳定的冒泡排序算法是指在排序过程中,相同元素的相对位置不会改变。
3. 实现一个选择排序算法。
答:选择排序是一种简单直观的排序算法。
其工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
二、字符串操作算法1. 实现一个函数,将一个字符串反转。
答:可以使用StringBuilder类的reverse()方法来实现字符串的反转。
2. 实现一个函数,将一个字符串中的所有大写字母转换为小写字母,其余字符保持不变。
答:可以使用String类的replaceAll()方法和toLowerCase()方法来实现。
3. 实现一个函数,将一个字符串按空格分割成单词数组,并删除空字符串和null字符串。
答:可以使用split()方法和Java 8的流来处理。
三、数据结构算法1. 实现一个单向链表,并实现插入、删除、查找和打印链表的功能。
答:单向链表是一种常见的数据结构,可以通过定义节点类和链表类来实现。
插入、删除、查找和打印链表的功能可以通过相应的方法来实现。
2. 实现一个二叉搜索树(BST),并实现插入、查找、删除节点的功能。
答:二叉搜索树是一种常见的数据结构,它具有唯一的高度特性。
插入、查找和删除节点的功能可以通过相应的方法来实现,如左旋、右旋、递归等。
3. 实现一个哈希表(HashMap),并实现插入、查找和删除键值对的功能。
答:HashMap是一种基于哈希表的映射数据结构,它通过哈希码的方式将键映射到对应的值上。
JAVA算法编程题全集(50题及答案)
程序1。
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?//这是一个菲波拉契数列问题public class lianxi01 {public static void main(String[] args) {System.out.println("第1个月的兔子对数: 1");System.out.println("第2个月的兔子对数: 1");int f1 = 1, f2 = 1, f, M=24;for(int i=3; i<=M; i++) {f = f2;f2 = f1 + f2;f1 = f;System.out.println("第" + i +"个月的兔子对数: "+f2);}}}。
程序2。
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
public class lianxi02 {public static void main(String[] args) {int count = 0;for(int i=101; i<200; i+=2) {boolean b = false;for(int j=2; j<=Math.sqrt(i); j++){if(i % j == 0) { b = false; break; }else { b = true; }}if(b == true) {count ++;System.out.println(i );}}System.out.println( "素数个数是: " + count);}}。
程序3。
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
java常见算法题整理
java常见算法题整理
以下是一些常见的 Java 算法题:
1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
2. 三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
3. 合并两个有序链表
将两个升序链表合并为一个新的升序链表并返回。
新链表是通过拼接给定的两个链表的所有节点组成的。
4. 反转链表
反转一个链表。
你可以使用迭代或递归的方法来解决这个问题。
5. 合并两个有序数组
将两个升序有序数组 A 和 B 合并为一个新的升序有序数组 C。
6. 二分查找
在排序数组中查找元素的近似最右位置。
通过比较数组中间元素和目标值的大小关系,如果目标值大于中间元素,则在右半部分继续查找;否则在左半部分查找。
重复此过程直到找到目标值或确定目标值不存在于数组中。
7. 二分查找 II
给定一个排序的整数数组 nums 和一个目标值 target,如果 nums 中包含目标值,则返回目标值的索引,否则返回 -1。
java基础算法题
Java基础算法题
一、算法的基本概念
1.1 什么是算法
1.2 算法的特性
1.3 算法的时间复杂度
1.4 算法的空间复杂度
二、算法解题思路
2.1 暴力求解法
2.2 贪心算法
2.3 动态规划算法
2.4 分治法
三、常见的Java基础算法题
3.1 数组相关算法题
1.从一个整数数组中找到两个数的和为特定值的所有不同组合。
2.找到一个整数数组中的连续子数组的最大和。
3.判断一个整数数组中是否存在重复元素。
3.2 链表相关算法题
1.反转一个单链表。
2.判断一个单链表是否为回文链表。
3.删除一个有序链表中的重复元素。
3.3 字符串相关算法题
1.判断一个字符串是否为回文串。
2.找到一个字符串中的最长回文子串。
3.字符串的全排列。
3.4 栈和队列相关算法题
1.用栈实现一个队列。
2.用队列实现一个栈。
3.判断一个括号表达式是否有效。
3.5 二叉树相关算法题
1.二叉树的前序遍历。
2.判断两个二叉树是否相同。
3.找到二叉树中的最大路径和。
四、算法题解题实例
4.1 暴力求解法示例
4.2 贪心算法示例
4.3 动态规划算法示例
4.4 分治法示例
五、算法的优化思路
5.1 时间复杂度优化
5.2 空间复杂度优化
六、总结与展望
6.1 对算法的理解与掌握
6.2 算法在编程中的应用
6.3 对算法的进一步学习规划。
java高频算法题
java高频算法题一、字符串匹配算法1. 滑动窗口:给定一个字符串数组和目标字符串,判断是否存在目标字符串在任意一个字符串中连续出现两次。
2. KMP算法:给定一个字符串和一个正整数k,判断字符串中是否至少有k个字符与目标字符串相同。
3. Boyer-Moore字符串匹配算法:给定一个字符串数组和目标字符串,在尽可能少的比较下,快速找到目标字符串在哪个位置开始出现。
4. Rabin-Karp 算法:给定一个字符串数组和目标字符串,判断是否存在目标字符串在任意一个字符串中出现。
二、数组算法1. 最大子序和:给定一个整数数组,判断是否存在两个数相等且它们的和等于所有数的最大值。
2. 最大上升和:给定一个整数数组,找出数组中的最大上升和,即连续正整数的和。
3. 最长递增子序列:给定一个整数数组,找出最长的不包含重复元素的递增子序列。
4. 最长回文子串:给定一个字符串,判断是否存在最长回文子串。
5. 三数之和:给定n个整数,判断是否存在三个数总和等于某一个特定的数。
6. 寻找重复的数字:给定一个整数数组,找出重复出现的数字。
7. 数组去重:给定一个整数数组,判断是否存在重复的元素,并去除重复元素。
三、链表算法1. 单链表插入节点:在单链表的末尾插入一个新的节点。
2. 单链表反转:将单链表中的节点顺序反转。
3. 单链表寻找节点:在单链表中寻找特定值的节点。
4. 单链表删除节点:从单链表中删除特定值的节点。
5. 单链表排序:对单链表中的节点进行排序。
四、树算法1. 二叉树中序遍历:给定一棵二叉树,实现中序遍历并输出结果。
2. 判断二叉树是否为平衡树:判断二叉树是否满足平衡条件,即左子树和右子树的高度差不超过1且它们的和不超过2。
3. 判断二叉树是否为二叉搜索树:判断二叉树是否满足二叉搜索树的特性,即左子树的所有节点的值小于根节点的值,右子树的所有节点的值大于根节点的值。
4. 二叉树求值:给定一棵二叉树和一个表达式,判断表达式是否能够通过二叉树进行求值。
java面试题经典算法
java面试题经典算法经典算法在Java面试中经常被问及,因为它们可以展示面试者对基本数据结构和算法的理解程度。
以下是一些经典算法,我会逐个介绍它们。
1. 冒泡排序(Bubble Sort),这是一种简单的排序算法,它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
时间复杂度为O(n^2)。
2. 快速排序(Quick Sort),快速排序使用分治法策略来把一个序列分为两个子序列。
它是一种分而治之的算法,时间复杂度为O(nlogn)。
3. 二分查找(Binary Search),二分查找是一种在有序数组中查找某一特定元素的搜索算法。
时间复杂度为O(logn)。
4. 递归算法(Recursion),递归是指在函数的定义中使用函数自身的方法。
递归算法通常用于解决可以被分解为相同问题的子问题的情况。
5. 动态规划(Dynamic Programming),动态规划是一种在数学、计算机科学和经济学中使用的一种方法。
它将问题分解为相互重叠的子问题,通过解决子问题的方式来解决原始问题。
6. 深度优先搜索(Depth-First Search)和广度优先搜索(Breadth-First Search),这两种搜索算法通常用于图的遍历和搜索。
深度优先搜索使用栈来实现,而广度优先搜索则使用队列来实现。
以上是一些常见的经典算法,当然还有很多其他的算法,如贪心算法、Dijkstra算法、KMP算法等等。
在面试中,除了了解这些算法的原理和实现方式之外,还需要能够分析算法的时间复杂度、空间复杂度以及适用场景等方面的知识。
希望这些信息能够帮助你在Java面试中更好地准备算法相关的问题。
java递归算法经典题目
java递归算法经典题目递归是一种常见的算法思想,它通过将问题分解为更小的子问题来解决问题。
在Java中,递归算法可以用于解决许多经典问题,如斐波那契数列、汉诺塔、阶乘等。
下面我们将介绍一些Java递归算法经典题目,帮助您更好地理解和掌握递归算法。
1.斐波那契数列斐波那契数列是一个经典的递归问题,它是指从第0项开始,每一项都是前两项的和。
在Java中,可以使用递归方法来求解斐波那契数列。
以下是一个简单的递归算法实现:```javapublicstaticintfibonacci(intn){if(n<=1){returnn;}else{returnfibonacci(n-1)+fibonacci(n-2);}}```这个算法会一直递归调用直到达到斐波那契数列的末项为止。
需要注意的是,递归算法的时间复杂度较高,当n值较大时可能会导致栈溢出等问题。
2.汉诺塔问题汉诺塔问题是一个经典的递归问题,它描述了一个操作:将一堆盘子从一个柱子移动到另一个柱子,要求遵循以下规则:每次只能移动一个盘子,并且大盘子不能放在小盘子上面。
在Java中,可以使用递归方法来解决汉诺塔问题。
以下是一个简单的递归算法实现:```javapublicstaticvoidhanoi(intn,Stringfrom,Stringto,Stringvia) {if(n==1){System.out.println("Movedisk"+n+"from"+from+"to"+to);}else{hanoi(n-1,from,via,to);System.out.println("Movedisk1from"+from+"to"+to);hanoi(n-1,via,to,from);}}```这个算法会一直递归调用,直到完成所有盘子的移动。
java中有趣的算法题
java中有趣的算法题Java中有许多有趣的算法题,以下是其中一些例子:1. FizzBuzz问题,编写一个程序,打印从1到100的数字。
但是对于3的倍数,打印"Fizz"代替数字;对于5的倍数,打印"Buzz"代替数字;对于既是3的倍数又是5的倍数的数字,打印"FizzBuzz"。
2. 反转字符串,编写一个程序,将给定的字符串进行反转。
例如,输入"Hello, World!",输出"!dlroW ,olleH"。
3. 斐波那契数列,编写一个程序,计算斐波那契数列的第n个数字。
斐波那契数列是一个数列,每个数字是前两个数字的和。
例如,前几个数字是0、1、1、2、3、5、8、13、21等。
4. 最大公约数,编写一个程序,计算两个整数的最大公约数。
最大公约数是能同时整除两个数的最大正整数。
可以使用欧几里得算法来解决这个问题。
5. 排序算法,实现不同的排序算法,如冒泡排序、选择排序、插入排序、快速排序等。
这些算法可以对一个数组或列表进行排序,使其按照升序或降序排列。
6. 查找算法,实现不同的查找算法,如线性查找、二分查找等。
这些算法可以在一个有序或无序的数组或列表中查找指定的元素,并返回其位置或索引。
7. 字符串匹配算法,实现不同的字符串匹配算法,如暴力匹配、KMP算法等。
这些算法可以在一个字符串中查找指定的子串,并返回其位置或索引。
8. 图算法,实现不同的图算法,如深度优先搜索、广度优先搜索、最短路径算法等。
这些算法可以在一个图中进行遍历或寻找最短路径等操作。
以上只是一些例子,Java中还有许多其他有趣的算法题。
通过解决这些问题,可以提高自己的编程能力和算法思维。
java中有趣的算法题
java中有趣的算法题在Java中,有许多有趣的算法题可以挑战和解决。
以下是一些常见的有趣算法题:1. 斐波那契数列,编写一个函数来计算斐波那契数列中的第n 个数字。
斐波那契数列是一个数字序列,每个数字都是前两个数字的和(0, 1, 1, 2, 3, 5, 8, ...)。
2. 最大子序列和,给定一个整数数组,找到一个具有最大和的连续子数组。
例如,对于数组[-2, 1, -3, 4, -1, 2, 1, -5, 4],最大子序列和为6([4, -1, 2, 1])。
3. 反转字符串,编写一个函数来反转一个字符串。
例如,输入"Hello, World!",输出"!dlroW ,olleH"。
4. 字符串中的第一个唯一字符,给定一个字符串,找到第一个不重复出现的字符并返回它的索引。
如果不存在这样的字符,返回-1。
例如,对于字符串"leetcode",返回0。
5. 两数之和,给定一个整数数组和一个目标值,找出数组中和为目标值的两个数的索引。
例如,对于数组[2, 7, 11, 15]和目标值9,返回[0, 1]。
6. 验证回文字符串,给定一个字符串,判断它是否是回文字符串。
回文字符串是指正着读和倒着读都一样的字符串。
例如,对于字符串"A man, a plan, a canal: Panama",返回true。
7. 有效的括号,给定一个只包含'(',')','{','}','['和']'的字符串,判断字符串中的括号是否有效。
例如,对于字符串"()[]{}",返回true。
8. 二叉树的最大深度,给定一个二叉树,找出其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点数。
例如,对于二叉树[3, 9, 20, null, null, 15, 7],最大深度为3。
朗致 java 算法题
朗致 java 算法题一、入门级算法题1. 编写一个Java程序,实现两个数的交换。
```javapublic class SwapNumbers {public static void main(String[] args) {int a = 5;int b = 10;int temp = a;a = b;b = temp;System.out.println("交换后的结果为:" + "a = " + a + ", b = " + b);}}```2. 编写一个Java程序,实现斐波那契数列的前N项。
```javapublic class Fibonacci {public static void main(String[] args) {int n = 10; // 可以修改为需要计算的斐波那契数列的项数int[] fibonacci = new int[n];fibonacci[0] = 0;fibonacci[1] = 1;for (int i = 2; i < n; i++) {fibonacci[i] = fibonacci[i-1] + fibonacci[i-2];}System.out.println("斐波那契数列前" + n + "项为:" + fibonacci);}}```二、进阶级算法题1. 编写一个Java程序,实现一个函数,输入一个字符串,返回字符串中所有单词的首字母大写后的新字符串。
```javapublic class CapitalizeWords {public static void main(String[] args) {String str = "this is a sample string";String result = capitalizeWords(str);System.out.println("结果为:" + result);}public static String capitalizeWords(String str) {StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {String word = str.substring(i, i+1); // 获取单词的首字母字符sb.append(Character.toUpperCase(word)); // 将单词的首字母转为大写并添加到结果中}return sb.toString(); // 返回结果字符串}}```2. 编写一个Java程序,实现一个函数,输入一个二维数组,返回该数组中所有正负号交替出现的小方阵(行数等于列数)。
java 算法训练题
java 算法训练题算法训练题是一种重要的练习方式,可以提高编程能力和解决问题的能力。
下面是一些常见的Java算法训练题以及解答参考。
1. 反转字符串:给定一个字符串,将其倒序输出。
可以使用StringBuilder或StringBuffer中的reverse()方法,或者通过遍历字符串来实现。
```javapublic class ReverseString {public static void main(String[] args) {String str = "Hello, World!";StringBuilder sb = new StringBuilder(str);sb.reverse();System.out.println(sb.toString());}}```2. 计算阶乘:给定一个正整数n,计算其阶乘。
可以使用递归或循环来实现。
```javapublic class Factorial {public static void main(String[] args) {int n = 5;System.out.println(factorial(n));}public static int factorial(int n) {if (n == 0 || n == 1) {return 1;}int result = 1;for (int i = 2; i <= n; i++) {result *= i;}return result;}}```3. 查找最大值和最小值:给定一个整数数组,查找其中的最大值和最小值。
可以使用循环遍历数组,并用两个变量来保存当前的最大值和最小值。
```javapublic class MaxMinValue {public static void main(String[] args) {int[] nums = {2, 4, 1, 6, 8, 3};int max = Integer.MIN_VALUE;int min = Integer.MAX_VALUE;for (int num : nums) {if (num > max) {max = num;}if (num < min) {min = num;}}System.out.println("Max value: " + max);System.out.println("Min value: " + min);}}```4. 判断素数:给定一个正整数n,判断其是否为素数(只能被1和自身整除)。
java基础编程算法题
java基础编程算法题Java是一种广泛应用于软件开发的编程语言,它具有简单易学、跨平台等特点,因此在编程领域中得到了广泛的应用。
而算法作为计算机科学的基础,对于程序员来说也是必不可少的一部分。
在Java编程中,掌握一些基础的算法题目,不仅可以提高编程能力,还能够培养逻辑思维和解决问题的能力。
下面我将介绍几个常见的Java基础编程算法题。
1. 两数之和题目描述:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
解题思路:使用哈希表来存储数组中的元素和对应的索引。
遍历数组,对于每个元素,判断目标值减去当前元素是否在哈希表中,如果存在,则返回两个数的索引。
2. 最大子序和题目描述:给定一个整数数组,找到一个具有最大和的连续子数组(子数组最少包含一个元素)。
解题思路:使用动态规划的思想,定义一个变量maxSum来存储当前最大的子序和,定义一个变量curSum来存储当前的子序和。
遍历数组,对于每个元素,判断当前子序和加上当前元素是否大于当前元素本身,如果大于,则更新当前子序和,否则,将当前子序和更新为当前元素。
同时,比较当前子序和和最大子序和,更新最大子序和。
3. 两个数组的交集题目描述:给定两个数组,编写一个函数来计算它们的交集。
解题思路:使用哈希集合来存储第一个数组中的元素,然后遍历第二个数组,判断元素是否在哈希集合中,如果存在,则将元素添加到结果集合中。
4. 反转字符串题目描述:编写一个函数,其作用是将输入的字符串反转过来。
解题思路:使用双指针的方法,定义一个指针start指向字符串的起始位置,定义一个指针end指向字符串的末尾位置。
交换start和end 指针所指向的字符,并将start指针向后移动一位,end指针向前移动一位,直到start指针大于等于end指针。
以上是几个常见的Java基础编程算法题,通过解题思路的分析和实际的编程练习,可以提高我们的编程能力和解决问题的能力。
在实际的编程工作中,我们还可以根据具体的需求和场景,灵活运用算法来解决各种问题。
java基础编程算法题
java基础编程算法题Java是一种广泛使用的编程语言,而算法是编程中不可或缺的一部分。
本文将介绍一些Java基础编程算法题,通过实例演示和解析,帮助读者巩固基本的编程概念和算法思维。
### 1. 最大公约数最大公约数是指能够同时整除两个数的最大正整数。
在Java中,我们可以使用欧几里得算法来求解最大公约数。
```javapublic class GCD {public static int gcd(int a, int b) {if (b == 0) {return a;}return gcd(b, a % b);}public static void main(String[] args) {int a = 24;int b = 36;int result = gcd(a, b);System.out.println("最大公约数为:" + result);}}```### 2. 斐波那契数列斐波那契数列是指当前数等于前两个数之和的数列。
在Java中,我们可以使用递归或循环来实现斐波那契数列。
```javapublic class Fibonacci {public static int fibonacciRecursion(int n) {if (n <= 1) {return n;}return fibonacciRecursion(n - 1) + fibonacciRecursion(n - 2);}public static int fibonacciLoop(int n) {if (n <= 1) {return n;}int a = 0, b = 1;for (int i = 2; i <= n; i++) {int temp = a + b;a = b;b = temp;}return b;}public static void main(String[] args) {int n = 10;System.out.println("第" + n + "个斐波那契数列数值(递归):" + fibonacciRecursion(n));System.out.println("第" + n + "个斐波那契数列数值(循环):" + fibonacciLoop(n));}}```### 3. 单词逆转给定一个字符串,将字符串中的单词逆转。
JAVA经典算法练习题
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
【程序31】
题目:将一个数组逆序输出。
1.程序分析:用第一个与最后一个交换。
【程序32】
题目:取一个整数a从右端开始的4~7位。
程序分析:可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用~(~0 < <4)
(3)将上面二者进行&运算。
【程序33】
题目:打印出杨辉三角形(要求打印出10行如下图)
【程序10】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
【程序11】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
【程序42】
题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
【程序43】
题目:求0—7所能组成的奇数个数。
【程序44】
题目:一个偶数总能表示为两个素数之和。
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。
经典的JAVA算法题及答案
经典的JAVA算法题及答案1.使用Java语言编写代码,将一个正整数分解质因数,例如:输入90,打印输出90=2*3*3*5。
答案:public class Math{public static void main(String[] args){int n,i;System.out.println("\nplease input a number:\n");Scanner input=new Scanner(System.in);n=input.nextInt();System.out.println(n);for(i=2;i<=n;i++){while(n!=i){if(n%i==0){System.out.println(i);n=n/i;}else{break;}}}System.out.println(n);}}2.题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
static int[] bits = new int[] { 1, 2, 3, 4, 5 };/*** @param args*/public static void main(String[] args) {sort("", bits);}private static void sort(String prefix, int[] a) {if (a.length == 1) {System.out.println(prefix + a[0]);}for (int i = 0; i < a.length; i++) {sort(prefix + a, copy(a, i));}}private static int[] copy(int[] a,int index){int[] b = new int[a.length-1];System.arraycopy(a, 0, b, 0, index);System.arraycopy(a, index+1, b, index, a.length-index-1);return b;}3.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
最经典的JAVA算法题及答案
1.使用Java语言编写代码,将一个正整数分解质因数,例如:输入90,打印输出90=2*3*3*5。
答案:public class Math{public static void main(String[] args){int n,i;System.out.println("\nplease input a number:\n");Scanner input=new Scanner(System.in);n=input.nextInt();System.out.println(n);for(i=2;i<=n;i++){while(n!=i){if(n%i==0){System.out.println(i);n=n/i;}else{break;}}}System.out.println(n);}}2.题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
static int[] bits = new int[] { 1, 2, 3, 4, 5 };/*** @param args*/public static void main(String[] args) {sort("", bits);}private static void sort(String prefix, int[] a) {if (a.length == 1) {System.out.println(prefix + a[0]);}for (int i = 0; i < a.length; i++) {sort(prefix + a, copy(a, i));}}private static int[] copy(int[] a,int index){int[] b = new int[a.length-1];System.arraycopy(a, 0, b, 0, index);System.arraycopy(a, index+1, b, index, a.length-index-1);return b;}3.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
无答案ava经典问题算法大全
Java经典问题算法大全/*【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....*//*【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
*//*【程序3】题目:打印出所有的"水仙花数(narcissus number)",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
*//*【程序4】题目:将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
*//*【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
1.程序分析:(a>b)?a:b这是条件运算符的基本例子。
*//*【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
*//** 在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回* 较大的数,此数即为最小公约数,最小公倍数为两数之积除以最小公倍数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....public class exp2{public static void main(String args[]){int i=0;for(i=1;i<=20;i++)System.out.println(f(i));}public static int f(int x){if(x==1 || x==2)return 1;elsereturn f(x-1)+f(x-2);}}或public class exp2{public static void main(String args[]){int i=0;math mymath = new math();for(i=1;i<=20;i++)System.out.println(mymath.f(i));}}class math{public int f(int x){if(x==1 || x==2)return 1;elsereturn f(x-1)+f(x-2);}}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
public class exp2{public static void main(String args[]){math mymath = new math();for(i=2;i<=200;i++)if(mymath.iszhishu(i)==true)System.out.println(i);}}class math{public int f(int x){if(x==1 || x==2)return 1;elsereturn f(x-1)+f(x-2);}public boolean iszhishu(int x){for(int i=2;i<=x/2;i++)if (x % 2==0 )return false;return true;}}【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
public class exp2{public static void main(String args[]){int i=0;math mymath = new math();for(i=100;i<=999;i++)if(mymath.shuixianhua(i)==true)System.out.println(i);}}class math{public int f(int x){if(x==1 || x==2)return 1;return f(x-1)+f(x-2);}public boolean iszhishu(int x){for(int i=2;i<=x/2;i++)if (x % 2==0 )return false;return true;}public boolean shuixianhua(int x){int i=0,j=0,k=0;i=x / 100;j=(x % 100) /10;k=x % 10;if(x==i*i*i+j*j*j+k*k*k)return true;elsereturn false;}}【程序4】题目:将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
public class exp2{public exp2(){}public void fengjie(int n){for(int i=2;i<=n/2;i++){if(n%i==0){System.out.print(i+"*");fengjie(n/i);}}System.out.print(n);System.exit(0);///不能少这句,否则结果会出错}public static void main(String[] args){String str="";exp2 c=new exp2();str=javax.swing.JOptionPane.showInputDialog("请输入N的值(输入exit退出):");int N;N=0;try{N=Integer.parseInt(str);}catch(NumberFormatException e){e.printStackTrace();}System.out.print(N+"分解质因数:"+N+"=");c.fengjie(N);}}【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
1.程序分析:(a> b)?a:b这是条件运算符的基本例子。
import javax.swing.*;public class ex5 {public static void main(String[] args){String str="";str=JOptionPane.showInputDialog("请输入N的值(输入exit退出):");int N;N=0;try{N=Integer.parseInt(str);}catch(NumberFormatException e){e.printStackTrace();}str=(N>90?"A":(N>60?"B":"C"));System.out.println(str);}}【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
最大公约数:public class CommonDivisor{public static void main(String args[]){commonDivisor(24,32);}static int commonDivisor(int M, int N){if(N<0||M<0){System.out.println("ERROR!");return -1;}if(N==0){System.out.println("the biggest common divisor is :"+M);return M;}return commonDivisor(N,M%N);}}最小公倍数和最大公约数:import java.util.Scanner;public class CandC{//下面的方法是求出最大公约数public static int gcd(int m, int n){while (true){if ((m = m % n) == 0)return n;if ((n = n % m) == 0)return m;}}public static void main(String args[]) throws Exception{//取得输入值//Scanner chin = new Scanner(System.in);//int a = chin.nextInt(), b = chin.nextInt();int a=23; int b=32;int c = gcd(a, b);System.out.println("最小公倍数:" + a * b / c + "\n最大公约数:" + c);}}【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为''\n ''.import java.util.Scanner;public class ex7 {public static void main(String args[]){System.out.println("请输入字符串:");Scanner scan=new Scanner(System.in);String str=scan.next();String E1="[\u4e00-\u9fa5]";String E2="[a-zA-Z]";int countH=0;int countE=0;char[] arrChar=str.toCharArray();String[] arrStr=new String[arrChar.length];for (int i=0;i<arrChar.length ;i++ ){arrStr[i]=String.valueOf(arrChar[i]);}for (String i: arrStr ){if (i.matches(E1)){countH++;}if (i.matches(E2)){countE++;}}System.out.println("汉字的个数"+countH);System.out.println("字母的个数"+countE);}}【程序8】题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
1.程序分析:关键是计算出每一项的值。
import java.io.*;public class Sumloop {public static void main(String[] args) throws IOException{int s=0;String output="";BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入a的值");String input =stadin.readLine();for(int i =1;i<=Integer.parseInt(input);i++){output+=input;int a=Integer.parseInt(output);s+=a;}System.out.println(s);}}另解:import java.io.*;public class Sumloop {public static void main(String[] args) throws IOException{int s=0;int n;int t=0;BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in));String input = stadin.readLine();n=Integer.parseInt(input);for(int i=1;i<=n;i++){t=t*10+n;s=s+t;System.out.println(t);}System.out.println(s);}}【程序9】题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。