当前位置: 首页 > news >正文

【刷题宝典NO.0】

目录

素数的判定

打印素数

打印水仙花数 

百钱买百坤

输出闰年

逆序打印一个整数的每一位

输出乘法口诀表 

数字9出现的次数 

二进制1的个数 

输出一个整数的偶数位和奇数位的二进制序列  

求两个整数的最大公约数 

求两个整数的最小公倍数 

小乐乐与欧几里得

小乐乐与进制转换

计算分数的值

计算求和

数列求和 

打印各种图案

打印长方形

打印距离前面有一定空隙的长方形

打印空心正方形

打印 X 图形 

打印平行四边形

打印三角形

打印菱形

打印空心菱形 

小乐乐走台阶

斐波那契数列 

递归实现n的k次方 

递归求 N 的阶乘

递归求和 

递归打印数字的每一位 

返回的数字之和 


素数的判定

题目内容:

给定一个数字,判定一个数字是否是素数

import java.util.Scanner;public class Solution {public static void main(String[] args) {//方法1:让n去试除2--->n-1
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int i = 2;
//        for (; i <= n - 1; i++) {    //让n去试除2--->n-1 比如:拿7试除2,3,4,5,6,因为7不能被2--->6内的数整除,说明7是素数
//            if (n % i == 0) {
//                break;
//            }
//        }
//        if (i == n) {   //如果i增长到n了,i == n > n - 1,也可以写成i > n-1 , 说明n只能被它自己整除,即素数
//            System.out.println(n + "是素数");
//        }//方法2:让n去试除2--->n/2
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int i = 2;
//        for (; i <= n / 2; i++) {   //让n去试除2--->n/2,比如:16 :1*16 2*8 4*4 总存在一个数<=2/n
//            if (n % i == 0) {
//                break;
//            }
//        }
//        if (i > n / 2) {   //如果i == (2+n)/2 > n/2 了,也可以写成i > n / 2,说明n只能被它自己整除,即素数
//            System.out.println(n + "是素数");
//        }//方法3:让n去试除2--->根号n
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int i = 2;
//        for (; i <= Math.sqrt(n); i++) {   //让n去试除2--->根号n,比如: 根号n * 根号n = n 总存在一个数<=根号n
//            if (n % i == 0) {
//                break;
//            }
//        }
//        if (i > Math.sqrt(n)) {   //如果i > 根号n,说明n只能被它自己整除,即素数
//            System.out.println(n + "是素数");
//        }
//    }//方法4:同方法3一样,多引入一个开关 在这有点多此一举Scanner sc = new Scanner(System.in);int n = sc.nextInt();int flag = 1;   //引入一个开关,1是素数 0不是素数int i = 2;for (; i <= Math.sqrt(n); i++) {   //让n去试除2--->根号n,比如: 根号n * 根号n = n 总存在一个数<=根号nif (n % i == 0) {flag = 0;   //如果能被整除,说明不是素数,结束本次循环break;}}if (1 == flag) {    //说明是素数System.out.println(n + "是素数");}}
}

 52b65791589241b8ae1752571ba85823.png

打印素数

题目内容:
打印 1 - 100 之间所有的素数,并统计素数的个数

import java.util.Scanner;public class Solution {public static void main(String[] args) {//方法1:引入开关
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int count = 0;
//        int j = 2;
//        for (; j <= n; j++) {
//            int flag = 1;//引入一个开关,1是素数 0不是素数
//            int i = 2;
//            for (; i <= Math.sqrt(j); i++) {//让j去试除2--->根号j,比如: 根号n * 根号n = n 总存在一个数<=根号n
//                if (j % i == 0) {//如果能被整除,说明不是素数,结束本次循环
//                    flag = 0;
//                    break;
//                }
//            }
//            if (1 == flag) {//是素数就记录个数并打印
//                count++;
//                System.out.print(j + " ");
//            }
//        }
//        System.out.print("count = " + count);//方法2:改进版,将判断素数的方法封装成函数提出去Scanner sc = new Scanner(System.in);int n = sc.nextInt();int count = 0;int i = 1;for (; i <= n; i++) {if (isPrimer(i) == 1) {count++;System.out.print(i + " ");}}System.out.print("count = " + count);}//判断是否为素数public static int isPrimer(int n) {int i = 2;for (; i <= Math.sqrt(n); i++) {   //让n去试除2--->根号n,比如: 根号n * 根号n = n 总存在一个数<=根号nif (n % i == 0) {return 0;}}return 1;}
}

756478f236494571b2916994cd1558db.png

打印水仙花数 

题目内容:

求出0~100000之间的所有“水仙花数”并输出。

“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。

public class OnlineTest {//这是一个main方法,是程序的入口:public static void main(String[] args) {int i = 0;for (i = 0; i <= 100000; i++) {// 判断i是否为自幂数// 1. 计算i的位数int n = 1; // 一个数至少是一位数int tmp = i;while ((tmp /= 10) != 0) {n++;}// 2. 得到的i的每一位,求每一位的n次方和tmp = i;//刚刚是把tmp做了处理的,现在要重新赋值一次int sum = 0;while (tmp > 0) {sum += (int) Math.pow(tmp % 10, n);tmp /= 10;}if (sum == i) {System.out.print(i + " ");}}}
}

28cc0c5544a44ea1ac31713702e29344.png

百钱买百坤

public class OnlineTest {public static void main(String[] args) {//公鸡,母鸡,小鸡三个不是必须都有int cock, hen, chick;for (cock = 1; cock <= 20; cock++) {for (hen = 1; hen <= 33; hen++) {for (chick = 3; chick <= 99; chick += 3) {if (cock * 5 + hen * 3 + chick / 3 == 100) {if (cock + hen + chick == 100) {System.out.println("公鸡:" + cock + "母鸡:" + hen + "小鸡:" + chick);}}}}}}
}
public class OnlineTest {public static void main(String[] args) {/*百钱买百鸡:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。数学:设未知数:公鸡:x只母鸡:y只小鸡:z只x+y+z=100只5x+3y+z/3=100钱麻烦方式://下面那个代码不需要判断z%3==0,是因为每次z+=3,z的增长已经是三的倍数了。for(int x=1;x<=100;x++){for(int y=1;y<=100;y++){for(int z=1;z<=100;z++){//可以修改为(int z=3;z<=100;z+=3),下面就不需要再z%3==0了。if((x+y+z==100)&&(5*x+3*y+z/3==100)&&(z%3==0)){System.out.println(x+"\t"+y+"\t"+z);}}}}*///优化:for (int x = 1; x <= 19; x++) {//100-1-3=96,96/5=19for (int y = 1; y <= 31; y++) {//100-5-1=94,94/3=31int z = 100 - x - y;if ((5 * x + 3 * y + z / 3 == 100) && (z % 3 == 0)) {System.out.println(x + "\t" + y + "\t" + z);}}}}
}

 629f258ee2974e21bed5a3597487f2f7.png

输出闰年

题目内容:
输出 1000 - 2000 之间所有的闰年 

public class OnlineTest {public static boolean isLeapYear(int year) {
//        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
//            return true;
//        }else{
//            return false;
//        }return ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0));}public static void main(String[] args) {Scanner in = new Scanner(System.in);for (int year = 1000; year <= 2000; year++) {boolean flag = isLeapYear(year);if (flag == true) {System.out.println(year + "是闰年!");}}}
}

9301226d54fd49399f8e188713aad134.png

逆序打印一个整数的每一位

题目内容:
逆序打印一个整数的每一位,如:123的每一位是3,2,1

本题主要考虑,如何获取一个数字的每一位:
123 % 10 = 3
123/10=12 12%10=2
12/10=1 1%10= 1

import java.util.Scanner;
public class OnlineTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();while (n != 0) {System.out.print(n % 10 + " ");n /= 10;}}
}

d0fe914df6834ca58d26513ab4d3f5ca.png

输出乘法口诀表 

题目内容:
输出n*n的乘法口诀表,n由用户输入。

import java.util.Scanner;
public class OnlineTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();for (int i = 1; i <= n; i++) {for (int j = 1; j <= i; j++) {System.out.print(i + "*" + j + "=" + i * j + "\t");}System.out.println();}for (int i = n; i >= 1; i--) {for (int j = 1; j <= i; j++) {System.out.print(i + "*" + j + "=" + i * j + "\t");}System.out.println();}}
}

 846dc06a49ed47b989e66d6cdf8da3b5.png

数字9出现的次数 

题目内容:
编写程序数一下 1到 100 的所有整数中出现多少个数字9

public class OnlineTest {public static void main(String[] args) {int count = 0;for (int i = 1; i <= 100; i++) {if (i % 10 == 9) {//判断个位的9count++;}if (i / 10 == 9) {count++;//判断十位的9}//多少个数字出现过9,此时99算1个数字,即一共19个/*if (i % 10 == 9) {//判断个位的9count++;}else if(i / 10 == 9) {count++;//判断十位的9}*/}System.out.println(count);}
}

a4263a2f356d42ccb0e63a0b9ae20954.png

二进制1的个数 

题目内容:
求一个整数,在内存当中存储时,二进制1的个数。

import java.util.Scanner;
public class OnlineTest {//方法1:/*public static int numberOf1(int n) {int count = 0;for (int i = 0; i < 32; i++) { //n可以在2进制中表示32位,每次让n无符号向右移动一位,每一位和1相与if (((n >>> i) & 1) == 1) {count++;}}return count;}*///方法2:/*public static int numberOf1(int n) {int count = 0;*//*for (int i = 0; i < 32; i++) {if ((n & 1) == 1) {count++;}n >>>= 1;}*//*while (n != 0) {if ((n & 1) != 0) {count++;}n >>>= 1;}return count;}*///方法3:n & (n - 1) 每次消去一个1,记录消去1的次数,直到1全部被消去变为0为止public static int numberOf1(int n) {int count = 0;while (n != 0) {n = n & (n - 1);    //n &= n - 1;count++;}return count;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int ret = numberOf1(n);System.out.println(ret);}
}

8e2417259b49497ea3a7bfb90c54a33c.png

717701d90235413194b44688c895eb5c.png

输出一个整数的偶数位和奇数位的二进制序列  

import java.util.Scanner;
public class OnlineTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();//偶数位 下标从1开始(第二个数),每次让n右移2位让偶数位 和 1做 & 运算,如果结果是1说明当前偶数位是1,同理结果是0。。。for (int i = 31; i >= 1 ; i-=2) {System.out.print(((n >> i) & 1)+" ");}System.out.println();//奇数位 下标从0开始(第一个数),每次让n右移2位让奇数位 和 1做 & 运算,如果结果是1说明当前奇数位是1,同理结果是0。。。for (int i = 30; i >= 0 ; i-=2) {System.out.print(((n >> i) & 1)+" ");}}
}

bffc70fa3f804d30b27db333c7ec0bd2.png

a6123d50e1ba40e98942e616cb5ff778.png

 0a4b37185d3248e6b4c52eccae4d58f8.png 

求两个整数的最大公约数 

题目内容:
给定两个数,求这两个数的最大公约数

例如:

输入:20 40

输出:20

import java.util.Scanner;
public class OnlineTest {public static void main(String[] args) {//方法1:找出m和n之间的最小值min,用m和n同时对min整除,如果同时被整除,那么这个min就是最大公约数,如果不能整除,那么就min--/*Scanner in = new Scanner(System.in);int m = in.nextInt();int n = in.nextInt();int min = m > n ? n : m;while (true) {if (m % min == 0 && n % min == 0) {System.out.println("最大公约数:" + min);break;}min--;}*///方法2:辗转相除法 m % n = r ,如果r != 0,m = n,n = r,当r = 0时,n为最大公约数// 例如:m:24 n:18 第一次:m % n = 24 % 18 = 6 第二次:18 % 6 = 0,6为最大公约数Scanner in = new Scanner(System.in);int m = in.nextInt();int n = in.nextInt();/*int r = m % n;while (r != 0) {m = n;n = r;r = m % n;}*/int r = 0;while ((r = m % n) != 0) {m = n;n = r;}System.out.println("最大公约数:" + n);}
}

a5d4f89bda664e68975f44837ba12031.png

求两个整数的最小公倍数 

题目内容:
给定两个数,求这两个数的最小公倍数

例如:

输入:12 15

输出:60

import java.util.Scanner;
public class OnlineTest {public static void main(String[] args) {//找出m和n之间的最大值max,用max对m和n整除,如果同时整除了m和n,那么这个max就是最小公倍数,如果不能整除,那么就max++Scanner in = new Scanner(System.in);int m = in.nextInt();int n = in.nextInt();int max = m > n ? m : n;//或者int max = Math.max(m, n);while (true) {if (max % m == 0 && max % n == 0) {System.out.println("最小公倍数:" + max);break;}max++;}}
}

004f50e0134b429cb02de13e7528904f.png

小乐乐与欧几里得

https://www.nowcoder.com/share/jump/4389976241698855052246

描述

小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。

输入描述:

每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)

输出描述:

对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。

示例1

输入:

10 20

输出:

30

示例2

输入:

15 20

输出:

65

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long m = scanner.nextLong();long n = scanner.nextLong();long m2 = m;long n2 = n;long r = 0;//最大公约数while ((r = m2 % n2) != 0) {m2 = n2;n2 = r;}long max = n2;//最小公倍数:m * n / 最大公约数long min = m * n / n2;System.out.println(max + min);}
}

小乐乐与进制转换

https://www.nowcoder.com/share/jump/4389976241698856221648

描述

小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。

输入描述:

输入一个正整数n  (1 ≤ n ≤ 109)

输出描述:

输出一行,为正整数n表示为六进制的结果

示例1

输入:

6

输出:

10

示例2

输入:

120

输出:

320

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int arr[] = new int[20];int i = 0;while (n > 0) {arr[i] = n % 6;n /= 6;i++;}for (--i; i >= 0; i--) {System.out.print(arr[i]);}}
}

计算分数的值

题目内容:
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 。

思路:
1. 从上述表达式可以分析出
   该表达式主要由100项,奇数项为正,偶数项为负
2. 设置一个循环从1~100,给出表达式中的每一项:1.0/i, 注意此处不能使用1,否则结果全部为0
  然后使用flag标记控制奇偶项,奇数项为正,偶数项为负
  然后将所有的项相加即可

public class OnlineTest {//这是一个main方法,是程序的入口:public static void main(String[] args) {double sum = 0.0;int flag = 1;for (int i = 1; i <= 100; i++) {sum += 1.0 * flag / i;flag = -flag;}System.out.println(sum);}
}

 06cd35f6bc244e1f85bef961041c995b.png

计算求和

题目内容:

求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,

例如:2+22+222+2222+22222

import java.util.Scanner;public class OnlineTest {//这是一个main方法,是程序的入口:public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int a = scanner.nextInt();int n = scanner.nextInt();int i = 0;int Sn = 0;int k = 0;for (i = 0; i < n; i++) {k = k * 10 + a;Sn += k;}System.out.println(Sn);}
}

0f16cfe1e97e447b8c0f2b6ace57fc6a.png

数列求和 

数列求和

09508f6b56e1485499d686ae7f4f3456.png

前n(n<=20)项之和。(不使用if…else等选择分支语句)
思路:
1.推导公式:

0b8b2efd1a534dbdbca5ef43d215e2cc.png

2.每次循环累加的时候符号要变换,引入一个开关,控制正负号
3.在循环里面的时候a的值每次还要减a,不然a会一直累加,a的值是相对于上个式子的b基础上+1的

import java.util.Scanner;
public class Main {//这是一个main方法,是程序的入口:public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();//b/a == b=a+b/a=b+1double b = 2; //起始分子double a = 1; //起始分母double sum = 0.0;int flag = 1;for (int i = 0; i < n; i++) {sum += 1.0 * flag * b / a; //累加b += a;  //分子a = b + 1 - a;  //分母 注意这儿每次循环要-a,因为每次循环分母a的值会累加,a的值是相对于上个式子的b基础上+1flag = -flag;}System.out.println(sum);}
}

 0310e6243f554d9b951a8699f073a588.png

打印各种图案

打印长方形

7eea04fb926e4dc7bc9f4438f270de5c.png

public class OnlineTest {public static void main(String[] args) {for (int j = 1; j <= 4; j++) {//j:控制行数//*********for (int i = 1; i <= 9; i++) {//i:控制*的个数System.out.print("*");}//换行:System.out.println();}}
}

9d9f97b6e7a34b92bd33403d2d31ae4a.png

打印距离前面有一定空隙的长方形

0979c3f91034447daa5566b06571d037.png

public class OnlineTest {public static void main(String[] args) {for (int j = 1; j <= 4; j++) {//j:控制行数//加入空格:for (int i = 1; i <= 5; i++) {//i:控制空格的个数System.out.print(" ");}//*********for (int i = 1; i <= 9; i++) {//i:控制*的个数System.out.print("*");}//换行:System.out.println();}}
}

f272f659fb394adf86e7903432717ecd.png

打印空心正方形

https://www.nowcoder.com/share/jump/1698854024034

描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。

输入描述:

多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。

输出描述:

针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。

示例1

输入:

4

输出:

* * * * 
*     * 
*     * 
* * * * 

示例2

输入:

5

输出:

* * * * * 
*       * 
*       * 
*       * 
* * * * * 
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNextInt()) {int n = scanner.nextInt();for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if ((i == 0) || (i == n - 1) || (j == 0) || (j == n - 1))System.out.print("* ");elseSystem.out.print("  ");}System.out.println();}}scanner.close();}
}

打印 X 图形 

https://www.nowcoder.com/practice/83d6afe3018e44539c51265165806ee4

描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。

输入描述:

多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。

输出描述:

针对每行输入,输出用“*”组成的X形图案。

示例1

输入:

5

复制输出:

*     *
  * *
   * 
  * *
*    *

复制

示例2

输入:

6

复制输出:

*        *
  *    *
   * * 
   * * 
  *   *
*       *

import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextInt()) { // 注意 while 处理多个 caseint n  = in.nextInt();for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if ((i == j) || (i + j == n - 1)) {System.out.print("*");} else {System.out.print(" ");}}System.out.println();}}}
}

打印平行四边形

23ebc3d0e56548daa62babc6e7fc4cf4.png

public class OnlineTest {public static void main(String[] args) {for (int j = 1; j <= 4; j++) {//j:控制行数//加入空格:for (int i = 1; i <= (9 - j); i++) {//i:控制空格的个数System.out.print(" ");}//*********for (int i = 1; i <= 9; i++) {//i:控制*的个数System.out.print("*");}//换行:System.out.println();}}
}

94cb15a7ca944d99a3808aebad69fa47.png

打印三角形

592a97074f994b3bba39ecebab98d605.png

public class OnlineTest {public static void main(String[] args) {for (int j = 1; j <= 4; j++) {//j:控制行数//加入空格:for (int i = 1; i <= (9 - j); i++) {//i:控制空格的个数System.out.print(" ");}//*********for (int i = 1; i <= (2 * j - 1); i++) {//i:控制*的个数System.out.print("*");}//换行:System.out.println();}}
}

8ada18b9f782475c9e2dba361b1e6de1.png

打印菱形

52a15e17d15b4048b0fc7e57935fb465.png

public class OnlineTest {public static void main(String[] args) {//上面三角形:for (int j = 1; j <= 4; j++) {//j:控制行数//加入空格:for (int i = 1; i <= (9 - j); i++) {//i:控制空格的个数System.out.print(" ");}//*********for (int i = 1; i <= (2 * j - 1); i++) {//i:控制*的个数System.out.print("*");}//换行:System.out.println();}//下面三角形:for (int j = 1; j <= 3; j++) {//j:控制行数//加入空格:for (int i = 1; i <= (j + 5); i++) {//i:控制空格的个数System.out.print(" ");}//*********for (int i = 1; i <= (7 - 2 * j); i++) {//i:控制*的个数System.out.print("*");}//换行:System.out.println();}}
}

d7ca106188364222a18c9ee4cb419aa5.png

public class OnlineTest {public static void main(String[] args) {//先打印出一个正方形,然后某些位置上打印* 某些位置上打印空格:int size = 17;int startNum = size / 2 + 1;//起始列号int endNum = size / 2 + 1;//结束列号//引入一个布尔类型的变量---》理解为“开关”boolean flag = true;for (int j = 1; j <= size; j++) {//*****for (int i = 1; i <= size; i++) {if (i >= startNum && i <= endNum) {System.out.print("*");} else {System.out.print(" ");}}//换行System.out.println();if (endNum == size) {flag = false;}if (flag) {//flag是true相当于在菱形的上半侧   flag是false相当于在菱形的下半侧startNum--;endNum++;} else {startNum++;endNum--;}}}
}

 2a0701a23c70490fb05c3d158cd7e511.png

打印空心菱形 

4f18d12a936d4142a512d85051cb1990.png

public class OnlineTest {public static void main(String[] args) {//先打印出一个正方形,然后某些位置上打印* 某些位置上打印空格:int size = 17;int startNum = size / 2 + 1;//起始列号int endNum = size / 2 + 1;//结束列号//引入一个布尔类型的变量---》理解为“开关”boolean flag = true;for (int j = 1; j <= size; j++) {//*****for (int i = 1; i <= size; i++) {if (i == startNum || i == endNum) {System.out.print("*");} else {System.out.print(" ");}}//换行System.out.println();if (endNum == size) {flag = false;}if (flag) {//flag是true相当于在菱形的上半侧   flag是false相当于在菱形的下半侧startNum--;endNum++;} else {startNum++;endNum--;}}}
}

 6ad94c2db9b24410ac4fd49ce4335b9a.png

小乐乐走台阶

https://www.nowcoder.com/share/jump/4389976241698854945904

描述

小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?

输入描述:

输入包含一个整数n (1 ≤ n ≤ 30)

输出描述:

输出一个整数,即小乐乐可以走的方法数。

示例1

输入:

2

输出:

2

示例2

输入:

10

输出:

89

import java.util.Scanner;public class Main {public static int walk(int n) {if (n <= 2) {return n;} else {return walk(n - 1) + walk(n - 2);}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int ret = walk(n);System.out.println(ret);scanner.close();}
}

斐波那契数列 

题目内容:
求斐波那契数列的第n项。(迭代实现)


斐波那契数列定义为:1 1 2 3 5 8 13 21 我们可以看到,从第3项开始,都等于前一项+前一项的前一项的和。
3=1+2
5+2+3
13 = 5+8
我们可以先定义f1保存第一项的值,f2保存第2项的值,f3保存第3项的值。
每次算法一个f3,就同步更新f1和f2的值。

import java.util.Scanner;
public class OnlineTest {//1.递归实现斐波那契数列public static int fib1(int n) {if (n <= 2) {return 1;} else {return fib1(n - 1) + fib1(n - 2);}}//2.       fib: 1   1   2   3   5//              a + b = c//                  a + b = c//          n: 1   2   3   4   5//                     n = 3,即n > 2时,有 c = a + b ; a = b ; b = cpublic static int fib2(int n) {int a = 1;int b = 1;int c = 0;while (n > 2) {//从第三项开始c = a + b;a = b;b = c;n--;}return c;}public static int fib3(int n) {if (n == 1 || n == 2) {return 1;}int f1 = 1;int f2 = 1;int f3 = 0;for (int i = 3; i <= n; i++) {f3 = f1 + f2;f1 = f2;f2 = f3;}return f3;}//这是一个main方法,是程序的入口:public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int ret1 = fib1(n);int ret2 = fib2(n);int ret3 = fib3(n);System.out.println("递归实现:" + ret1);System.out.println("--------------");System.out.println("非递归实现:" + ret2);System.out.println("非递归实现:" + ret3);}
}

 1e0ae15494934b65870a02b1fb9615f0.png

递归实现n的k次方 

public class OnlineTest {public static void main(String[] args) {int n = 2;int k = -1;System.out.println(power(n, k));}public static double power(int n, int k) {if (k == 0) {return 1;} else if (k > 0 ){return n * power(n, k - 1);} else {//k < 0return 1.0 / power(n, -k);}}
}

3ecf4a90f5854a188d84bc4d7310263f.png

递归求 N 的阶乘

题目内容:
递归求 N 的阶乘
递归代码重要的是推导递推公式:假设N的阶乘用F(n)表示,那么F(n) = n * F(n-1);

import java.util.Scanner;
public class OnlineTest {public static int fac(int n) {if(n < 2) {return 1;}return n * fac(n-1);}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();System.out.println(fac(n));}
}

fd01ab29ab3a4b8aaf78602d6ef67006.png

递归求和 

题目内容:
递归求 1 + 2 + 3 + ... + 10

假设用F(n) 代表1-n的和,那么F(n) = n + F(n-1)的和
F(n-1)就是1到n-1的和

import java.util.Scanner;
public class OnlineTest {public static int sum(int n) {if(n == 1) {return 1;}return n + sum(n-1);}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();System.out.println(sum(n));}
}

8406fa4b598c496eb5b440dd364b08d3.png

递归打印数字的每一位 

题目内容:
按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) (递归)
假设用F(n) 代表 要顺序打印n的每一位,如果n是一个1位数,直接输出,如果n是2位数以上。
如:
123 相当于先打印12的每一位,再打印3
12 相当于先打印1的每一位,再打印2
1 只有一位数,直接打印。
依次回退打印完,每一位即可。

public class OnlineTest {//写法1:public static void print(int num) {if (num > 9) {print(num / 10);}System.out.println(num % 10);}//写法2:public static void fun(int n) {if (n <= 9) {System.out.println(n);return; //出口,不然会栈溢出错误(必须由程序员解决)}fun(n / 10);System.out.println(n % 10);}public static void main(String[] args) {fun(1234);System.out.println("-----");print(1234);}
}

 f71e157c2da24de09cf42e67d757479f.png

返回的数字之和 

题目内容:
写一个递归方法,输入一个非负整数,返回组成它的数字之和

要计算123的每一位,主要在于如何得到每一位。在前面的习题中我们知道,除10 , 模10.可以做到。
如下图,在执行n=123的时候,先执行add(123/10)也就是add(12)这个函数,等最后回来之后,才会把n=123时候的n%10算完。

84daa550e52f4fc0b9c0d61a3a2a2399.png

public class OnlineTest {public static int digitSum(int n) {if (n <= 9) {return n;}return n % 10 + digitSum(n / 10);}public static void main(String[] args) {System.out.println(digitSum(1729));}
}

0bc9befe1bf34666973d8fcca7902e75.png

相关文章:

【刷题宝典NO.0】

目录 素数的判定 打印素数 打印水仙花数 百钱买百坤 输出闰年 逆序打印一个整数的每一位 输出乘法口诀表 数字9出现的次数 二进制1的个数 输出一个整数的偶数位和奇数位的二进制序列 求两个整数的最大公约数 求两个整数的最小公倍数 小乐乐与欧几里得 小…...

MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)

目录 介绍 特点 基本语法 创建 调用 查看 删除 示例 介绍 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理…...

基础课15——语音标注

语音数据标注是对语音数据进行处理和分析的过程&#xff0c;目的是让人工智能系统能够理解和识别语音中的信息。这个过程包括了对语音信号的预处理、特征提取、标注等步骤。 在语音数据标注中&#xff0c;标注员需要对语音数据进行分类、切分、转写等操作&#xff0c;让人工智…...

Linux启动故障排错

Linux启动过程 开机流程、模块管理-CSDN博客 Grub三个阶段 1st stage&#xff1a;执行Grub主程序。Grub安装在MBR。由于MBR太小&#xff0c;所以与配置文件分开放1.5 stage&#xff1a;识别不同的文件系统2nd stage&#xff1a;加载Grub配置文件 /boot/grub2/grub.cfg。配置…...

全新二开游戏支付通道/话费/电网、紫水晶带云端源码

源码修复可用&#xff0c;YY业务都可用 本店所售程序只供测试研究&#xff0c;不得使用于非法用途&#xff0c;不得违反国家法律&#xff0c;不得用于进行违法行为&#xff0c;否则后果自负&#xff01;购买以后用作他用附带的一切法律责任后果都由购买者承担于本店无任何关…...

Hadoop相关知识点

文章目录 一、主要命令二、配置虚拟机2.1 设置静态ip2.2 修改主机名及映射2.3 修改映射2.4 单机模式2.5 伪分布式2.6 完全分布式 三、初识Hadoop四、三种模式的区别4.1、单机模式与伪分布式模式的区别4.2、特点4.3、配置文件的差异4.3.1、单机模式4.3.2、伪分布式模式4.3.3、完…...

Javassist讲解1(介绍,读写字节码)

Javassist讲解1&#xff08;介绍&#xff0c;读写字节码&#xff09; 介绍一、读写字节码1.如何创建新的类2.类冻结 介绍 javassist 使Java字节码操作变得简单&#xff0c;它是一个用于在Java中编辑字节码的类库&#xff1b; 它使Java程序能够在运行时定义一个新类&#xff0c;…...

【Linux】常见指令以及具体其使用场景

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;随着博主的学习&#xff0c;博主掌握的技能也越来越多&#xff0c;今天又根据最近的学习开设一个新的专栏——Linux&#xff0c;相信Linux操作系…...

后台管理(二)

1、权限控制 如果没有权限控制&#xff0c;系统的功能完全不设防&#xff0c;全部暴露在所有用户面前。用户登录以后可以使用系统中的所有功能。这是实际运行中不能接受的&#xff0c;所以权限控制系统的目标就是管理用户行为&#xff0c;保护系统功能。 1.1、 定义资源 资源就…...

反转链表II(C++解法)

题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;[1…...

记一次 logback 没有生成独立日志文件问题

背景 在新项目发布后发现日志文件并没有按照期望的方式独立开来&#xff0c;而是都写在了 application.log 文件中。 问题展示 日志文件&#xff1a; 项目引入展示&#xff1a; <include resource"paas/sendinfo/switch/client/sendinfo-paas-switch-client-log.…...

数据库强化(1.视图)

1.什么是视图 视图是指计算机数据库中的视图&#xff0c;是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。但是&#xff0c;视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的…...

Mysql与SeaweedFS数据不同步问题产生原因及解决办法

文章目录 Mysql与SeaweedFS数据不同步问题的探究与解决问题背景原因探究不一致的写操作缺乏事务管理 解决方案引入分布式事务处理使用消息队列 实践演示&#xff08;python代码&#xff09;结论 Mysql与SeaweedFS数据不同步问题的探究与解决 问题背景 在数据库和文件存储系统…...

Kotlin apply和with用法和区别

apply apply 是 Kotlin 标准库中的一个函数&#xff0c;它允许你在对象上执行一系列操作&#xff0c;然后返回该对象自身。它的语法结构如下&#xff1a; fun <T> T.apply(block: T.() -> Unit): T这个函数接受一个 lambda 表达式作为参数&#xff0c;该 lambda 表达…...

springboot通过aop自定义注解@Log实现日志打印

springboot通过aop自定义注解Log实现日志打印 文章目录 效果图实操步骤1.引入依赖2.自定义日志注解3.编写日志切面类4.UserController5.运行 效果图 实操步骤 注意&#xff0c;本代码在springboot环境下运行&#xff0c;jdk1.8 1.引入依赖 <dependency><groupId>…...

k8spod详解其二

一&#xff0c;资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时&#xff0c;调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为…...

golang包的管理

Go语言中包的使用 Go语言使用包&#xff08;package&#xff09;这种语法元素来组织源码&#xff0c;所有语法可见性均定义在package这个级别&#xff0c;与Java 、python等语言相比&#xff0c;这算不上什么创新&#xff0c;但与C传统的include相比&#xff0c;则是显得“先进…...

Windows10安装Anaconda与Pytorch的记录

这是一篇关于安装Anaconda和Pytorch的记录与复盘&#xff0c;写的原因是我电脑恢复系统之后东西全没了&#xff0c;再装Pytorch的时候一脸懵逼忘了怎么弄了&#xff0c;写篇记录以备我下一次安装。 1、Anaconda的安装 1.1、Anaconda安装包下载 下载链接: Free Download | An…...

图解Kafka高性能之谜(五)

高性能的多分区、冗余副本集群架构 高性能网络模型NIO 简单架构设计&#xff1a; 详细架构设计&#xff1a; 高性能的磁盘写技术 高性能的消息查找设计 索引文件定位使用跳表的设计 偏移量定位消息时使用稀疏索引&#xff1a; 高响应的磁盘拷贝技术 kafka采用sendFile()的…...

opencv在linux上调用usb摄像头进行拍照

功能 1.按照指定的文件名创建文件夹&#xff0c;创建之前判断该文件夹是否存在 2.调用摄像头按可调整窗口大小的方式显示 3.按esc退出摄像头画面 4.按p保存当前摄像头的画面&#xff0c;并按当前时间为照片的名字进行保存打开终端查看是否有摄像头 ls /dev/video*一般video1就…...

SpringCloud学习笔记-3

声明&#xff1a;笔记来源于网络&#xff0c;如有侵权联系删除 1 openfeign 1&#xff09;openfeign远程调用声明式实现 1.启动类中添加注解 EnableFeignClients EnableFeignClients SpringBootApplication public class OrderMainApplication {public static void main(St…...

# 从底层架构到应用实践:为何部分大模型在越狱攻击下失守?

从底层架构到应用实践&#xff1a;为何部分大模型在越狱攻击下失守&#xff1f; 引言 近期&#xff0c;我们对多个主流大语言模型&#xff08;LLM&#xff09;进行了安全性测试&#xff0c;使用了极具诱导性的越狱提示词&#xff0c;试图绕过其内容安全机制。测试结果显示&am…...

大二下期末

一.Numpy&#xff08;Numerical Python&#xff09; Numpy库是Python用于科学计算的基础包&#xff0c;也是大量Python数学和科学计算包的基础。不少数据处理和分析包都是在Numpy的基础上开发的&#xff0c;如后面介绍的Pandas包。 Numpy的核心基础是ndarray&#xff08;N-di…...

Github 2025-06-06 Java开源项目日报Top10

根据Github Trendings的统计,今日(2025-06-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10TypeScript项目1Java实现的算法集合:使用Gitpod.io进行编辑和贡献 创建周期:2883 天开发语言:Java协议类型:MIT LicenseStar数量…...

Unity3D仿星露谷物语开发60之定制角色其他部位

1、目标 上一篇中定制了角色的衬衫、手臂。 本篇中将定制角色其他部位的图形&#xff0c;包括&#xff1a;裤子、发型、皮肤、帽子等。 2、定制裤子 &#xff08;1&#xff09;修改ApplyCharacterCustomisation.cs脚本 我们需要设置一个输入框选择裤子的颜色。 // Select …...

链游技术破壁:NFT资产确权与Play-to-Earn经济模型实战

链游技术破壁&#xff1a;NFT资产确权与Play-to-Earn经济模型实战 ——从「投机泡沫」到「可持续生态」的技术重构 一、NFT确权技术革新&#xff1a;从链上存证到动态赋权 跨链确权架构 全链互操作协议&#xff1a;采用LayerZero协议实现以太坊装备与Solana土地的跨链组合&…...

VMware 安装 CentOS8详细教程 (附步骤截图)附连接公网、虚拟机yum源等系统配置

1 下载安装镜像 centos8官方源已下线,旧的下载地址已不可用,需要切换centos-vault源 华为云CentOS8镜像下载地址 阿里云CentOS8镜像下载地址 中科大CentOS8镜像下载地址 2 安装CentOS8 2.1 创建虚拟机 打开VMware Workstation 左上角 文件-新建虚拟机...

移动端测试岗位高频面试题及解析

文章目录 一、基础概念二、自动化测试三、性能测试四、专项测试五、安全与稳定性六、高级场景七、实战难题八、其他面题 一、基础概念 移动端测试与Web测试的核心区别&#xff1f; 解析&#xff1a;网络波动&#xff08;弱网测试&#xff09;、设备碎片化&#xff08;机型适配&…...

六级作文模板笔记

旧模板 Today there is a growing awareness that mental well-being needs to be given as much attention as physical health. In the contemporary world where change is constant and knowledge is ever-expanding, mental well-being has become increasingly importan…...

Registry和docker有什么关系?

当遇到多个服务器需要同时传docker镜像的时候&#xff0c;一个一个的传效率会非常慢且压力完全在发送方的网络带宽&#xff1b;可以参考git hub&#xff0c;通常我们会用git push将代码传到git hub&#xff0c;如果谁需要代码用git pull就可以拉到自己的机器上&#xff0c;dock…...