java求数列的最大子段和_常见Java代码测试题

c8bfc319b879f6b182ca2819636f3057.png

1:九九乘法表:

315633f19bb40c2cd28a9d73895f773e.png

2:冒泡排序

外层循环n-1 内层循环n-1-i

b86b219b240ead502bd68d2fd7b10136.png

3:100以内的素数

3e5d84eca6e4d5106adb55dc3e0132c7.png

4:鸡兔同笼问题:

鸡 兔 共35只头 94只脚。 求鸡和兔数量各多少只?

9b8900b294a81c2df1d38de58c641f2f.png

5:兔子生崽问题:

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
假如兔子都不死,问每个月的兔子总数为多少?
分析:兔子的规律为数列1,1,2,3,5,8,13,21。。。。
f(1) = 1(第1个月有一对兔子)
f(2) = 1(第2个月还是一对兔子)
f(3) = 2(原来有一对兔子,第3个开始,每个月生一对兔子)
f(4) = 3(原来有两对兔子,有一对可以生育)
。。。。。
由以上可以看出,第n个月兔子的对数为
f(n) = f(n - 1) + f(n - 2);
这是 斐波那契数列,规律是:从第三个数开始,每个数都是前两个数的合.最简单的方法就是 递归

356e840c21ebeb27ae57bcffb89ddf06.png

6:100-999中的水仙花数:个位十位百位分别三次方加和等于自身;

3ef35cacdf0b35e07bac7706ee6fa4d2.png

7:正整数分解质因数

将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
对n进行分解质因数,应先找到一个最小的质数i
1、如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
2、如果n > i,但n能被i整除,则应打印出i的值,并用n除以i的商,作为新的正整数你,重复执行第一步。
3、如果n不能被i整除,则用i+1作为i的值,重复执行第一步。

b9d37765b33d27943d87c367b7b09281.png

8:输入两个正整数m和n,求其最大公约数和最小公倍数。

利用辗除法。
例如:求4453和5767的最大公约数时,可作如下除法.
5767÷4453=1余1314
4453÷1314=3余511
1314÷511=2余292
511÷292=1余219
292÷219=1余73
219÷73=3
于是得知,5767和4453的最大公约数是73.
public class hello {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入第一个数字:");
        int a=sc.nextInt();
        System.out.print("请输入第二个数字:");
        int b=sc.nextInt();
        System.out.println("最大公约数为:"+MaxCommonDivisor(a,b));
        System.out.println("最小公倍数为:"+MinCommonMultiple(a,b));
    }
    private static int MaxCommonDivisor(int a,int b) {
        if(a < b){
            int temp = a;
            a = b;
            b = temp;
        }
        while(a % b !=0){
            int temp = a % b;
            a = b;
            b = temp;
        }
        return b;
    }
    private static int MinCommonMultiple(int a, int b){
        return a * b / MaxCommonDivisor(a, b);
    }
}

9:题目:求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。

697c80ee17703f250fdccfd298acc6c5.png

10: 6=1+2+3. 找出1000以内的所有完数(一个数如果恰好等于它的因子之和)

d7cdbeac78eb7b956829dfff24a00ffe.png

11:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,
求它在 第10次落地时,共经过多少米?第10次反弹多高? 弹球是一上一下的距离

e88bd45d488f7256b88083bd723fb847.png

12:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

025627860a0fb95782a3feb87d95cd1a.png

13:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

数值100万以内进行判断,先将该数加上100后再开方,再将该数加上168后再开方。  Math.sqrt(i+100)

a2351bc086beb15e2a9f99a4209dadb6.png

14:输入某年某月某日,判断这一天是这一年的第几天?

d3dbffdc62304a6abd2070d23f9f68e8.png

15:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

采取逆向思维的方法,从后往前推断。
天  数      1     2     3    4     5    。。。10
桃子数      1     4     10   22   46    。。。 
所以桃子数计算方法:前一天桃子数(当前天桃子数量 + 1)* 2
用递归方法如下:
public class hello {
    public static void main(String[] args) {
           System.out.println(peach(10));
    }
    private static int peach(int x) {
        if(x == 1){
            return 1;
        }else{
            return (peach(x-1) + 1) * 2; //n-1 意思为 第十天就是第(10-1)项 来表示的
        }
    }
}
输出的结果为:猴子第一天所摘的桃子数量为:1534
普通方法如下:
public class hello {
    public static void main(String[] args) {
        int sum =0;
        for(int i = 1; i <= 10; i++){
            if(i == 1)
                sum = 1;
            else
                sum = (sum + 1) * 2;
        }
           System.out.println("猴子第一天所摘的桃子数量为:"+ sum);
    }
}
输出结果同上。

16:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

斐波那契数列指的是这样一个数列: 0, 1, 1, 2, 3, 5, 8, 13,可以观察到,从第3个数开始,
每个数的值都等于前连个数之和。
同时,定义f(0) = 0, 
          f(1) = 1,
       则 f(2) = f(1)+ f(0) = 1,
          f(3) = f(2)+ f(1) = 2... 
依次类推,f(n) = f(n-1) + f(n-2)

动态规划:

ff958ee18f56ae8513ea9c7c5126eb6b.png

或 运用递归调用:

7e7fbbc3afa72f59cb88c3224857cf9a.png

17:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

其中 n 个台阶中有可以一次跳n级既: 在起初 一级跳 二级跳有结论 f(n) = f(n-1)+f(n-2)
f(1) = 1
f(2) = f(2-1) + f(2-2)
f(3) = f(3-1) + f(3-2) + f(3-3)      f(3-3)就是跳3级阶梯
...
f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n) 
这里f(n)倒序转换即:
f(n) = f(0) + f(1) + f(2) + f(3) + ... + f(n-1)
其中:这里的f(n) 代表的是n个台阶有一次1,2,...n阶的 跳法数。
那根据f(n) 提前写f(n-1) 那么:
f(n-1) = f(0) + f(1) + f(2) + f(3) + ... + (f(n-1)-1)
那f(n) = f(n-1) + f(n-1)
       = 2 * f(n-1)

递归调用:

4e3629bcb0fbdcc579963f5c2aee244d.png

或动态规划

5d30cbe3c893364e44919c270ccb6446.png
青蛙你乖,没事儿别出来瞎逛,怪累的。你孩子还在找你,赶紧回河里去,再不走就要被端上锅了,谢谢!

18:两个乒乓球队进行比赛,各出三人。甲队为A,B,C三人,乙队为X,Y,Z三人,比赛名单已定,有打听知,A说他不和X比,C说不和X和Z比,编程找出比赛名单

bb2cd881734b24d794e3e02d6cdec012.png

19:打印图案:菱形

假设是一到四到一 : 1 3 5 7 5 3 1  前四位2n-1 后三位倒叙 2n-1

5019f5df077b0d4e1b040d184bbf80d9.png

20: 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

分析:下一项的 分母 等于 前一项的 分子+分母;
      下一项的 分子 等于 前一项的 分子;

84809d6cbc58cd5dbfe729c2cbeb9fb2.png

21: 求1+2!+3!+...+20!的和。

e6895115ff1f049ea999911c16527328.png

方法二:

61b5818e02f06c6fddae924e1cf6b3e1.png

22:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

利用递归的方法,递归分为回推和递推两个阶段。
要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推

fbbc6ec678b1c106abd5ca2b79047f6c.png

23:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

public class hello {
    public static void main(String[] args) {
        // 请输入一个5位以内的正整数
        System.out.print("请输入一个5位以内的正整数:");
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        if (n < 0 || n > 1000000)
            System.out.println("输入有误,请重新输入");
         else
            System.out.println("这个数为" + getDigits(n) + "位");
            reversePrint(n);
    }
    // 获取这个数的位数
    public static int getDigits(int n) {
        int count = 0; // 记录位数
        while (n > 0) {
                count++;
            n /= 10;
        }
        return count;
    }
    // 逆序打印
    private static void reversePrint(int n) {
        System.out.print("逆序输出: ");
        while (n > 0) {
                System.out.print(n % 10 +" ");
            n /= 10;
        }
    }
}

24: 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

将输入的数字转化为数组判断所在位置的数值是否相等

bf4ebcdd562819ed8764def18932e8c8.png

25:求一个3 * 3矩阵对角线元素之和

利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

0130d9843aae790456b080a8dfdee60e.png

法二:未明白

c5952c64f62a761c1f991bfd8393354f.png

26:取一个整数a从右端开始的4~7位。

066efaa4c614512e69a609517c0e6b3f.png

27:打印出杨辉三角形

public class hello {
    public static void main(String[] args) {
        int[][] arr=new int[10][10];
        //给第一个位置赋值为1
        for(int i=0;i<arr.length;i++){
            arr[i][0]=1;
        }
        //给其他地方赋值,计算中间的值
        for(int i=1;i<arr.length;i++){
            for(int j=1;j<arr.length;j++){
                arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
            }
        }
        //调节输出的格式
        for(int i=0;i<arr.length;i++){
            for(int k=0;k<arr.length-i;k++){
                System.out.print("  ");
            }
            for(int j=0;j<arr.length;j++){
                if(arr[i][j]!=0){
                    System.out.printf("%4d",arr[i][j]);
                }
            }
            System.out.println();
        }
    }
}
输出如下结果:

642c660efcc0bcbca00972251a0865c7.png

28:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)

1、先判断是奇数还是偶数        
2、分数分子都是一,偶数分母从2开始,奇数的分母从1开始,分母差值都为2
public class hello {
    public static void main(String[] args) {
        System.out.println("请输入一个正整数:");
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        if(num%2 == 0){
            System.out.println("1/2+1/4+...+1/"+num+"="+even(num));;
        }else{
            System.out.println("1/1+1/3+...+1/"+num+"="+odd(num));;
        }
    }
    //偶数
    public static double even(int num){
        double sum = 0;
        for(int i = 2;i <= num;i = i+2){
            sum += 1.0/i;
        }
        return sum;
    }
    //奇数
    public static double odd(int num){
        double sum = 0;
        for(int i = 1;i<= num; i = i+2){
            sum += 1.0/i;
        }
        return sum;
    }
}
输出结果:

a19ef69e2544dde7c4d946e038c2d75a.png

e8e02856d94621700d01b859ea2c904d.png

29: 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

这个用逆向思维 这其实就是一个递归问题每次 * 5 +1
                    5      4       3       2         1     
桃子个数            6      31     156     781       3906
猴子拿的个数        1      6       31     156        781
即:f(n - 1) * 5 + 1  f(n-1) 表示平分时候桃子的数量

4b993a96a72822a319b962e51f24eb2a.png

30:求0—7所能组成的奇数个数。

ef5161e6b67151b24f56fbe738d1a828.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值