方法有关练习题
1、找出出现一次的数字
有一组数据,只有一个数字是出现一次,其他是两次,请找出这个数字。
/**
* Created with IntelliJ IDEA.
* Description:有一组数据,只有一个数字是出现一次,其他是两次,请找出这个数字。
* User: starry
* Date: 2020 -12 -11
* Time: 16:50
*/
public class Work1 {
public static int searchNum(int[] arr){
int len=arr.length;
for(int i=0;i<len;i++){
int appear=1;
for(int j=0;j<len;j++){
if(arr[i]==arr[j]&&(i!=j)){
appear=2;
break;
}
}
if(appear==1){
return arr[i];
}
}
return 0;
}
public static void main(String[] args) {
int[] arr={
2,3,5,1,3,5,2};
System.out.println(searchNum(arr));
}
}
2、斐波那契数
求斐波那契数列的第n项。(迭代实现)
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:求斐波那契数列的第n项。(迭代实现)
* User: starry
* Date: 2020 -12 -11
* Time: 17:03
*/
public class Work2 {
public static int fei(int n){
int left=1;
int right=1;
int tmp=0;
for(int i=0;i<n-2;i++){
tmp=right;
right=left+right;
left=tmp;
}
return right;
}
public static void main(String[] args) {
int n=0;
Scanner cin=new Scanner(System.in);
n=cin.nextInt();
int num=fei(n);
System.out.println(num);
}
}
3、求阶乘和
求1!+2!+3!+4!+…+n!的和
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:求1!+2!+3!+4!+........+n!的和
* User: starry
* Date: 2020 -12 -11
* Time: 17:31
*/
public class Work3 {
public static int sum(int n){
int a=1;
int sum=0;
for(int i=1;i<=n;i++){
a=1;
for(int j=1;j<=i;j++){
a=a*j;
}
sum=sum+a;
}
return sum;
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
System.out.println(sum(n));
}
}
4、求 N 的阶乘
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:求 N 的阶乘
* User: starry
* Date: 2020 -12 -11
* Time: 18:05
*/
public class Work4 {
public static int factorial(int n){
int fac=1;
for(int i=1;i<=n;i++){
fac*=i;
}
return fac;
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
System.out.println(factorial(n));
}
}
5、奇数位于偶数之前
调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。
/**
* Created with IntelliJ IDEA.
* Description:调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。
* User: starry
* Date: 2020 -12 -11
* Time: 18:09
*/
public class Work5 {
public static void change(int[] arr){
int len=arr.length;
for(int i=0;i<len;i++){
if(arr[i]%2==0){
for(int j=i+1;j<len;j++){
if(arr[j]%2==1){
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
break;
}
}
}
}
}
public static void main(String[] args) {
int[] arr={
5,2,7,8,9,4,1,6,3,0};
change(arr);
for(int a:arr){
System.out.print(a+" ");
}
}
}
6、求最大值
创建方法求两个数的最大值max2,随后再写一个求3个数的最大值的函数max3。
要求:在max3这个函数中,调用max2函数,来实现3个数的最大值计算
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:创建方法求两个数的最大值max2,随后再写一个求3个数的最大值的函数max3。
* 要求:在max3这个函数中,调用max2函数,来实现3个数的最大值计算
* User: starry
* Date: 2020 -12 -11
* Time: 18:37
*/
public class Work6 {
public static int max2(int a,int b){
return a>b?a:b;
}
public static int max3(int a,int b,int c){
int max=max2(a,b);
max=max2(max,c);
return max;
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int a=cin.nextInt();
int b=cin.nextInt();
int c=cin.nextInt();
System.out.println(max3(a,b,c));
}
}
7、求最大值方法的重载
/**
* Created with IntelliJ IDEA.
* Description:在同一个类中定义多个方法:要求不仅可以求两个整数的最大值,还可以求两个小数的最大值,以及两个小数和一个整数的大小关系
* User: starry
* Date: 2020 -12 -12
* Time: 17:23
*/
public class Work7 {
public static int max(int a,int b){
return a>b?a:b;
}
public static float max(float c,float d){
return c>d?c:d;
}
public static void max(int a,float c,float d){
if((float)a>c){
System.out.println(a+">"+c);
}else{
System.out.println(a+"<"+c);
}
if((float)a>d){
System.out.println(a+">"+d);
}else{
System.out.println(a+"<"+d);
}
}
public static void main(String[] args) {
int a=5;
int b=8;
float c=6.5f;
float d=8.9f;
int maxInt=max(a,b);
System.out.println(maxInt);
float maxFloat=max(c,d);
System.out.println(maxFloat);
max(a,c,d);
}
}
8、求和的重载
在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。 并执行代码,求出结果
/**
* Created with IntelliJ IDEA.
* Description:在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。 并执行代码,求出结果
* User: starry
* Date: 2020 -12 -12
* Time: 19:00
*/
public class Work8 {
public static int sum(int a,int b){
return a+b;
}
public static float sum(float a,float b,float c){
return a+b+c;
}
public static void main(String[] args) {
int a=3;
int b=4;
float c=6.2f;
float d=5.1f;
float e=1.9f;
int sum1=sum(a,b);
System.out.println(sum1);
float sum2=sum(c,d,e);
System.out.println(sum2);
}
}
9、青蛙跳台阶问题
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:青蛙跳台阶问题
* User: starry
* Date: 2020 -12 -12
* Time: 19:18
*/
public class Work9 {
/**
* 若一次能跳1或2级台阶,共n级台阶能有多少种方法
* f(n)=f(n-1)+f(n-2)
*/
public static int jump1(int n){
if(n==0){
return 0;
}
if(n==1){
return 1;
}
if(n==2){
return 2;
}
return jump1(n-1)+jump1(n-2);
}
/**
* 若一次能跳n级台阶,共n级台阶能有多少种方法
* f(n)=f(n-1)+f(n-2)+f(n-3)+...+f(1)+1
* f(n-1)=f(n-2)+f(n-3)+f(n-4)+...+f(1)+1
* 两式相减得
* f(n)=2*f(n-1)
*/
public static int jump2(int n){
if(n==0){
return 0;
}
if(n==1){
return 1;
}
return 2*jump2(n-1);
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
int num1=jump1(n);
System.out.println(num1);
int num2=jump2(n);
System.out.println(num2);
}
}
10、递归求解汉诺塔问题
/**
* Created with IntelliJ IDEA.
* Description:递归求解汉诺塔问题
* User: starry
* Date: 2020 -12 -12
* Time: 19:49
*/
public class Work10 {
public static void hanoi(int n, char A, char B, char C) {
if (n == 1) {
move(A, C);
} else {
hanoi(n - 1, A, C, B);//步骤1 按ACB数序执行N-1的汉诺塔移动
move(A, C); //步骤2 执行最大盘子移动
hanoi(n - 1, B, A, C);//步骤3 按BAC数序执行N-1的汉诺塔移动
}
}
public static void move(char A, char C) {
//执行最大盘子的从A-C的移动
System.out.println("move:" + A + "--->" + C);
}
public static void main(String[] args) {
System.out.println("移动汉诺塔的步骤:");
hanoi(3, 'a', 'b', 'c');
}
}
11、递归求斐波那契数列的第 N 项
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:递归求斐波那契数列的第 N 项
* User: starry
* Date: 2020 -12 -12
* Time: 20:26
*/
public class Work11 {
public static int feiBo(int n){
if(n==1){
return 1;
}
if(n==2){
return 1;
}
return feiBo(n-1)+feiBo(n-2);
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
System.out.println(feiBo(n));
}
}
12、返回的数字之和
写一个递归方法,输入一个非负整数,返回组成它的数字之和
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:写一个递归方法,输入一个非负整数,返回组成它的数字之和
* User: starry
* Date: 2020 -12 -12
* Time: 20:32
*/
public class Work12 {
public static int sum(int n){
if(n/10==0){
return n;
}
return n%10+sum(n/10);
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
System.out.println(sum(n));
}
}
13、递归打印数字的每一位
按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) (递归)
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) (递归)
* User: starry
* Date: 2020 -12 -12
* Time: 20:43
*/
public class Work13 {
public static void printNum(int n){
if(n>9){
printNum(n/10);
}
System.out.println(n%10+" ");
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
printNum(n);
}
}
14、递归求和
递归求 1 + 2 + 3 + … + 10
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:递归求 1 + 2 + 3 + ... + 10
* User: starry
* Date: 2020 -12 -12
* Time: 20:55
*/
public class Work14 {
public static int sum(int n){
if(n==1){
return 1;
}
return n+sum(n-1);
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
System.out.println(sum(n));
}
}
15、递归求 N 的阶乘
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:递归求 N 的阶乘
* User: starry
* Date: 2020 -12 -12
* Time: 21:01
*/
public class Work15 {
public static int factorial(int n){
if(n==1){
return 1;
}
return n*factorial(n-1);
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
System.out.println(factorial(n));
}
}