Java课程实验(上)

实验二

(1)把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包 含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。

(2)请实现从键盘输入10个数字,然后使用选择排序、冒泡排序、插入排序实现数字排序,并输出。

(3)一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。 注意在计算时,只算本质不同的串的个数。 请问,字符串0100110001010001 有多少个不同的非空子串?

package java实验2;
public class First {
    public static void main(String args[]) {
        //计算三数之和为2019
        int ans = 0;
        for(int i = 1;i <= 2019/2;i++) {
            if(juge(i)==0) continue;
            for(int j = i+1;j<=2019;j++) {
                if(juge(j)==0) continue;
                for(int k = j+1;k<=2019;k++) {
                    if(juge(k)==0) continue;
                    if(i+j+k == 2019) {
                        ans++;
                    }
                }
            }
        }
        System.out.println(ans);
    }
    public static int juge(int x) {
        //1表示此数不包含2或者4,0表示包含
        int flag = 1;
        while(x>0) {
            if (x % 10 == 2 || x % 10 == 4) {
                flag = 0;
                break;
            }
            else {
                x /= 10;
            }
        }
        return flag;
    }
}
package java实验2;
import java.util.Scanner;
public class Second {
    public static void main(String args[]) {
        Scanner reader = new Scanner(System.in);
        int [] numbers = new int[10];
        for (int i = 0;i<numbers.length;i++) {
            numbers[i] = reader.nextInt();
        }
        int [] numbers2 = numbers; //复制两个数组
        int [] numbers3 = numbers; 
        //冒泡
        for(int i = 0;i < numbers.length ;i++ ) {
            for (int j=0;j<numbers.length - 1;j++) {
                if(numbers[j]>numbers[j+1]) {
                    int temp;
                    temp = numbers[j+1];
                    numbers[j+1] = numbers[j];
                    numbers[j] = temp;
                }
            }
        }
        //插入
         for (int i = 1; i < numbers2.length; i++) {
                int key = numbers[i];
                int j = i - 1;
                // 将大于key的元素向后移动一位
                while (j >= 0 && numbers[j] > key) {
                    numbers[j + 1] = numbers[j];
                    j = j - 1;
                }
                numbers[j + 1] = key; // 将key插入到正确的位置
            }
        // 选择
            for (int i = 0; i < numbers3.length - 1; i++) {
                // 寻找[i, end]区间内的最小值
                int minIndex = i;
                for (int j = i + 1; j < numbers.length; j++) {
                    if (numbers[j] < numbers[minIndex]) {
                        minIndex = j; // 更新最小值的索引
                    }
                }
                // 将找到的最小值和第i位置所在的值交换
                if (minIndex != i) {
                    int temp = numbers[i];
                    numbers[i] = numbers[minIndex];
                    numbers[minIndex] = temp;
                }
            }
        System.out.println("冒泡排序结果为:");
        for (int number : numbers) {
            System.out.print(number+" ");
        }
&nbs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值