【刷题宝典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 + "是素数");}}
}
打印素数
题目内容:
打印 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;}
}
打印水仙花数
题目内容:
求出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 + " ");}}}
}
百钱买百坤
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);}}}}
}
输出闰年
题目内容:
输出 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 + "是闰年!");}}}
}
逆序打印一个整数的每一位
题目内容:
逆序打印一个整数的每一位,如: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;}}
}
输出乘法口诀表
题目内容:
输出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();}}
}
数字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);}
}
二进制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);}
}
输出一个整数的偶数位和奇数位的二进制序列
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)+" ");}}
}
求两个整数的最大公约数
题目内容:
给定两个数,求这两个数的最大公约数例如:
输入: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);}
}
求两个整数的最小公倍数
题目内容:
给定两个数,求这两个数的最小公倍数例如:
输入: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++;}}
}
小乐乐与欧几里得
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);}
}
计算求和
题目内容:
求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);}
}
数列求和
数列求和
前n(n<=20)项之和。(不使用if…else等选择分支语句)
思路:
1.推导公式:
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);}
}
打印各种图案
打印长方形
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();}}
}
打印距离前面有一定空隙的长方形
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();}}
}
打印空心正方形
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();}}}
}
打印平行四边形
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();}}
}
打印三角形
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();}}
}
打印菱形
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();}}
}
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--;}}}
}
打印空心菱形
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--;}}}
}
小乐乐走台阶
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);}
}
递归实现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);}}
}
递归求 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));}
}
递归求和
题目内容:
递归求 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));}
}
递归打印数字的每一位
题目内容:
按顺序打印一个数字的每一位(例如 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);}
}
返回的数字之和
题目内容:
写一个递归方法,输入一个非负整数,返回组成它的数字之和要计算123的每一位,主要在于如何得到每一位。在前面的习题中我们知道,除10 , 模10.可以做到。
如下图,在执行n=123的时候,先执行add(123/10)也就是add(12)这个函数,等最后回来之后,才会把n=123时候的n%10算完。
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));}
}
相关文章:

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

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

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

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

全新二开游戏支付通道/话费/电网、紫水晶带云端源码
源码修复可用,YY业务都可用 本店所售程序只供测试研究,不得使用于非法用途,不得违反国家法律,不得用于进行违法行为,否则后果自负!购买以后用作他用附带的一切法律责任后果都由购买者承担于本店无任何关…...

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(介绍,读写字节码) 介绍一、读写字节码1.如何创建新的类2.类冻结 介绍 javassist 使Java字节码操作变得简单,它是一个用于在Java中编辑字节码的类库; 它使Java程序能够在运行时定义一个新类,…...

【Linux】常见指令以及具体其使用场景
君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,随着博主的学习,博主掌握的技能也越来越多,今天又根据最近的学习开设一个新的专栏——Linux,相信Linux操作系…...
后台管理(二)
1、权限控制 如果没有权限控制,系统的功能完全不设防,全部暴露在所有用户面前。用户登录以后可以使用系统中的所有功能。这是实际运行中不能接受的,所以权限控制系统的目标就是管理用户行为,保护系统功能。 1.1、 定义资源 资源就…...

反转链表II(C++解法)
题目 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例 1: 输入:head [1,2,3,4,5], left 2, right 4 输出:[1…...

记一次 logback 没有生成独立日志文件问题
背景 在新项目发布后发现日志文件并没有按照期望的方式独立开来,而是都写在了 application.log 文件中。 问题展示 日志文件: 项目引入展示: <include resource"paas/sendinfo/switch/client/sendinfo-paas-switch-client-log.…...
数据库强化(1.视图)
1.什么是视图 视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的…...
Mysql与SeaweedFS数据不同步问题产生原因及解决办法
文章目录 Mysql与SeaweedFS数据不同步问题的探究与解决问题背景原因探究不一致的写操作缺乏事务管理 解决方案引入分布式事务处理使用消息队列 实践演示(python代码)结论 Mysql与SeaweedFS数据不同步问题的探究与解决 问题背景 在数据库和文件存储系统…...
Kotlin apply和with用法和区别
apply apply 是 Kotlin 标准库中的一个函数,它允许你在对象上执行一系列操作,然后返回该对象自身。它的语法结构如下: fun <T> T.apply(block: T.() -> Unit): T这个函数接受一个 lambda 表达式作为参数,该 lambda 表达…...

springboot通过aop自定义注解@Log实现日志打印
springboot通过aop自定义注解Log实现日志打印 文章目录 效果图实操步骤1.引入依赖2.自定义日志注解3.编写日志切面类4.UserController5.运行 效果图 实操步骤 注意,本代码在springboot环境下运行,jdk1.8 1.引入依赖 <dependency><groupId>…...
k8spod详解其二
一,资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时,调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为…...
golang包的管理
Go语言中包的使用 Go语言使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进…...

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

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

opencv在linux上调用usb摄像头进行拍照
功能 1.按照指定的文件名创建文件夹,创建之前判断该文件夹是否存在 2.调用摄像头按可调整窗口大小的方式显示 3.按esc退出摄像头画面 4.按p保存当前摄像头的画面,并按当前时间为照片的名字进行保存打开终端查看是否有摄像头 ls /dev/video*一般video1就…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...