十道简单算法题

最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下,重温一下。

只能说慢慢积累吧~下面的题目难度都是简单的,算法的大佬可直接忽略这篇文章了~入门或者算法薄弱的同学可参考一下~

很多与排序相关的小算法(合并数组、获取数字每位值的和),我都没有写下来了,因为只要会了归并排序(合并数组),会了桶排序(获取数字每位的值),这些都不成问题了。如果还不太熟悉八大基础排序的同学可看:【】

由于篇幅问题,每篇写十道吧~

如果有错的地方,或者有更好的实现,更恰当的理解方式希望大家不吝在评论区留言哦~大家多多交流

十道简单算法题 题目的总览

1-n阶乘之和

获取二维数组每列最小的值

求"1!+4!(2的平方)+9!(3的平方)+...+n的值

数组对角线元素之和

打印杨辉三角形

猴子吃桃子问题

计算单词的个数

判断字母是否完全一样

判断一个数是不是2的某次方

判断一个数字是不是ugly number

一、1-n阶乘之和

1-n阶乘之和怎么算?

1的阶乘是1

2的阶乘是1*2

3的阶乘是1*2*3

4的阶乘是1*2*3*4

.........

现在我们要求这些阶乘的和。思路:

3阶乘的和其实上就是2阶乘的和+3的阶乘

4阶乘的和其实上就是3阶乘的和+4的阶乘

.......

/** * 1-n的阶乘之和 */ public static void Factorial(int n) { //总和 double sum = 0; //阶乘值,初始化为1 double factorial = 1; for (int i = 1; i <= n; i++) { factorial = factorial * i; sum = (int) (sum + factorial); } System.out.println("公众号:Java3y" + " " + sum); } 二、获取二维数组每列最小的值

获取二维数组每列最小的值

思路:遍历列,再遍历列中行

我们一般操作数组都是从行开始,再到列的。这次要求的是每列的最小值,因此需要在内部for循环遍历的是行

/** * 求出二维数组每列的最小值 */ public static void minArray() { //二维数组 int[][] arrays = { {23, 106, 8, 234}, {25, 9, 73, 19}, {56, 25, 67, 137} }; //获取列数 int maxColLength = arrays[0].length; //使用一个数组来装载每列最小的值 int[] minArray = new int[maxColLength]; //控制列数 for (int i = 0; i < maxColLength; i++) { //假设每列的第一个元素是最小的 int min = arrays[0][i]; //控制行数 for (int j = 1; j < arrays.length; j++) { //找到最小值 if (arrays[j][i] < min) { min = arrays[j][i]; } } //赋值给装载每列最小的值的数组 minArray[i] = min; } System.out.println("公众号:Java3y" + " " + minArray); } 三、求"1!+4!(2的平方)+9!(3的平方)+...+n的值

求"1!+4!(2的平方)+9!(3的平方)的值

思路:先求平方,后求阶乘,最后相加即可~

/** * 求"1!+4!(2的平方)+9!(3的平方)+...+n的值 */ public static void calculate() { double sum = 0; for (int i = 1; i <= 3; i++) { //得到平方数 int square = i * i; //阶乘值,从1开始 double factorial = 1; //求阶乘 for (int j = 1; j <= square; j++) { factorial = factorial * j; } sum = sum + factorial; } System.out.println("公众号:Java3y" + " " + sum); } 四、数组对角线元素之和

数组对角线元素之和

思路:

只要行和列相等,即是对角线的元素

/** * 数组对角线之和 */ public static void arraySum() { int[][] arrays = { {23, 106, 8, 234}, {25, 9, 73, 19}, {56, 25, 67, 137}, {33, 22, 11, 44}, }; //和 int sum = 0; for (int i = 0; i < arrays.length; i++) { for (int j = 0; j < arrays[i].length; j++) { if (i == j) { sum = sum + arrays[i][j]; } } } System.out.println("公众号:Java3y" + sum); } 五、打印杨辉三角形

杨辉三角形

杨辉三角形长的是这个样子:

十道简单算法题

ps:图片来源网上,侵删~

规律:

每行的第一个和最后一个都是1

进一步推算:第1列全部为1,第一行全都是1,当列数等于行数为1

当前值等于头上的值加头上的左边的值

第一行一列,第二行两列,第三行三列.......

十道简单算法题

代码实现:

/** * 打印杨辉三角形 */ public static void PascalTriangle() { //打印十行的杨辉三角形 int[][] arrays = new int[10][]; //行数 for (int i = 0; i < arrays.length; i++) { //初始化第二层的大小 arrays[i] = new int[i + 1]; //列数 for (int j = 0; j <= i; j++) { //是第一列,第一行,行数等于列数,那么通通为1 if (i == 0 || j == 0 || j == i) { arrays[i][j] = 1; } else { //当前值等于头上的值+头上左边的值 arrays[i][j] = arrays[i - 1][j] + arrays[i - 1][j - 1]; } } } System.out.println("公众号:Java3y" + "-------------------------------"); for (int[] array : arrays) { for (int value : array) { System.out.print(value + "\t"); } System.out.println(); } System.out.println("公众号:Java3y" + "-------------------------------"); }

结果:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdgjd.html