Java算法题整理--2

一、求 s=a+aa+aaa+aaaa+aa…a 的值

public class Work4 {
    public static void main(String[] args) {
        int x = 0;
        int sum = 0;
        System.out.println("请输入数字a:");
        Scanner inputNumber = new Scanner(System.in);
        int i = inputNumber.nextInt();
        System.out.println("请输入几个数字相加:");
        Scanner num = new Scanner(System.in);
        int j = num.nextInt();
        for (int temp1 = 0;temp1 < j;temp1++)
        {
            for (int temp2 = 0;temp2 <= temp1 ;temp2++) {
                System.out.print(i);
                x = temp2;
            }
            if(x != j - 1 )
                System.out.print( "+");
        }
        System.out.print("=");
        for (int temp3 = 0;temp3 < j;temp3++)
        {
            sum += i;
            i = i*10 + i;
        }
        System.out.print(sum);
    }

二、模拟ATM机(判断字符串相等使用equals()方法)

public class Work5 {
    public static void main(String[] args) {

        String checkPsd = "123456789";
        int flag = 0 ;
        for(int i = 0 ;i < 3;i++){
            System.out.println("您有" +(3-i) + "次机会");
            System.out.println("请输入密码:");
            Scanner psd = new Scanner(System.in);
            String userPsd = psd.nextLine();
            System.out.println("密码输入错误");
            System.out.println();

            if (userPsd.equals(checkPsd)){
                System.out.println("密码正确\n账务余额:10000000$");
                break;
            }
            flag++;
        }
        if (flag == 3){
            System.out.println("密码输入错误,即将退出程序");
        }
    }
}

三、
假设某人有 100,000 现金.每经过一次路口需要进行一次交费. 交费规则为当他现金大于50,000 时每次需要交 5%如果现金小于等于 50,000 时每次交 5,000.请写一程序计算此人可以经过多少次这个路口

public class Work7 {
    public static void main(String[] args) {
        int count = 0;
        double totalMoney = 100000;
        for (;totalMoney > 0;){
            if (totalMoney > 50000){
                double temp = totalMoney * 0.05;
                totalMoney -= temp;
            }
            else {
                totalMoney -= 5000;
            }
            count++;
        }
        System.out.println("此人经过该路口" + count +"次");
    }
}

四、检查是否为水仙花数

public class Work18 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int armNumber = sc.nextInt();
        if(checkNumber(armNumber)) System.out.println(armNumber + "是水仙花数");
        else System.out.println("非水仙花数");

    }
    public static boolean checkNumber(int num){
        //检查num是否是水仙花数,如果是返回true,如果不是返回false;
        if (num < 100 || num > 999){
            System.out.println("水仙花数为三位数");
            return  false;
        }
        else {
        //必要的括号需要加上,否则编译无法识别
            if (((num % 10) * (num % 10) * (num % 10)) +
                    ((num / 10 % 10) * (num / 10 % 10) * (num / 10 % 10)) +
                    ((num/100) * (num/100) * (num/100)) == num ){
                return true;
            }
            else return  false;
        }

    }
}

五、
数组{3,1,4,6,5,9,7,8,12}
输入数字:18
得到结果:
18 = 3+6+9
18 = 6+12
18 = 1+9+8
18 = 1+4+5+8

本体采用笨方法,可通过先找出最小几个数字组成的和大于指定数,可知需要几个数字组合,然后几个数字组合即使用几层for循环…ps.简单有效

public class Work21 {
    public static void main(String[] args) {
        int arr[] = {3, 1, 4, 6, 5, 9, 7, 8, 12};
        getInfo(arr,18);
    }

    public static void getInfo(int[] arr, int num) {
        //从数组arr中找出相加等于num的数组组合,并且输出到控制台。
        //如果没有找到,就输出没有解

        //两个数组合
            for(int i = 0;i < arr.length;i++){
                int sum = 0;
                sum += arr[i];
                for (int j = i + 1;j<arr.length;j++){
                    sum += arr[j];
                    if(sum == num){
                        System.out.print(arr[i] + "+");
                        System.out.print(arr[j] + "=" + num);
                    }
                    else sum -= arr[j];
                }
            }
             System.out.println();
            //三个数组合
            for(int i = 0;i < arr.length;i++){
                int sum = 0;
                sum += arr[i];
                for(int j = i+1;j < arr.length;j++){
                    sum += arr[j];
                    if(sum < num){
                        for (int k = j + 1;k < arr.length;k++){
                            sum += arr[k];
                            if(sum == num){
                                System.out.print(arr[i] + "+");
                                System.out.print(arr[j] + "+");
                                System.out.print(arr[k] + "=" + num);
                                System.out.println();
                                sum -= arr[k];
                            }
                            else sum -= arr[k];
                        }
                        sum -= arr[j];
                    }
                    else sum -= arr[j];
                }
            }
            //四个数组合
            for(int i = 0;i < arr.length;i++){
                int sum = 0;
                sum += arr[i];
                for(int j = i+1;j < arr.length;j++){
                    sum += arr[j];
                    if(sum < num){
                        for (int k = j + 1;k < arr.length;k++){
                            sum += arr[k];
                            if(sum < num){
                                for(int t = k + 1;t < arr.length;t++){
                                    sum += arr[t];
                                    if (sum == num)
                                    {
                                        System.out.print(arr[i] + "+");
                                        System.out.print(arr[j] + "+");
                                        System.out.print(arr[k] + "+");
                                        System.out.print(arr[t] + "=" + num);
                                        System.out.println();
                                        sum -= arr[t];
                                    }
                                    else sum -= arr[t];
                                }
                                sum -= arr[k];
                            }
                            else sum -= arr[k];
                        }
                        sum -= arr[j];
                    }
                    else sum -= arr[j];
                }
            }
        }
    }

运行结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值