西安交通大学915考研--编程题Java代码踩坑(2020年真题)

西安交通大学915考研–编程题Java代码踩坑(2020年真题)

2020.1–寻找方程组的解

问题描述:
有a、b、c、d四个0-9的未知整数,组成两个四位数,分别是abcd、cadb;求使得两个四位数之和等于9012的所有解

思路:

  1. 直接用四个for循环暴力求解
  2. 相加和正确的就输出,不正确就跳过
  3. 这里不需要考虑优化,如果有时间可以写时间复杂度、空间复杂度,并给出优化思路的文字描述。

代码实现:

package com.xjtu;

/**
 * @Author: cc雪影
 * @Description:
 */
public class A2020_01 {
    public static void main(String[] args) {
        int num1;
        int num2;
        for (int a = 0; a <= 9; a++) {

            for (int b = 0; b <= 9; b++) {
                for (int c = 0; c <= 9; c++) {
                    for (int d = 0; d <= 9; d++) {
                        num1 = a * 1000 + b * 100 + c * 10 + d;
                        num2 = c * 1000 + a * 100 + d * 10 + b;
                        if (num1 + num2 == 9102) {
                            System.out.println(a + " " + b + " " + c + " " + d);
                        }
                    }
                }
            }
        }
    }
}

2020.2–几组数中筛选出反序数

问题描述:
接收n组数,针对每一组进行判断,若互为两位的反序数之和与原数之和互为反序数,则输出;若n组数中不存在这种数组,输出none
反序数:所谓反序数,即有这样成对的数,其特点是其中一个数的个数字排列顺序完全颠倒过来,就变成另一个数,如102和201,36和63等,简单的理解就是顺序相反的两个数,我们把这种成对的数互称为反序数。

解题思路

  1. 对于反序数的求法,可以将整数转换成字符串进行处理
  2. 写一个judge函数,用于判断改组数组是不是符合题目要求
  3. 最后引入isEmpty变量,记录n组数中是否存在满足题意的数组,若不满足,则输出none

代码实现:

package com.xjtu;

import java.util.Scanner;

/**
 * @Author: cc雪影
 * @Description:
 */
public class A2020_02 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入组数 n");
        int n = in.nextInt();
        int arr[][] = new int[n][2];
        for (int i = 0; i < n; i++) {
            arr[i][0] = in.nextInt();
            arr[i][1] = in.nextInt();
        }
        boolean isEmpty = true;
        for (int i = 0; i < arr.length; i++) {
            if (judge(arr[i][0], arr[i][1])) {
                isEmpty = false;
                System.out.println(arr[i][0] + " " + arr[i][1]);
            }
        }
        if (isEmpty) {
            System.out.println("none");
        }
    }

    public static boolean judge(int a, int b) {
        int n1 = reverse(a);
        int n2 = reverse(b);
        int n3 = reverse(a + b);
        return (n1 + n2) == n3;
    }//123 111 321 111 432

    public static int reverse(int number) {
        String s = "";
        String string = Integer.toString(number);
        char[] chars = string.toCharArray();
        for (int i = chars.length - 1; i >= 0; i--) {
            s = s + chars[i];
        }
        return Integer.parseInt(s);
    }
}


输入输出:

请输入组数 n
3
112 754
234 467
123 111
112 754
123 111

2020.3–商品购买方案(人民币组合问题)

问题描述:
购买礼物,,商品A:150元, B:100元,C: 50元, D:50元;合计消费200元,且每种商品购买的数量不作要求,求共有多少种购买方案。

解题思路

  1. 仿照人民币组合问题,利用动态规划,逐次求出合计200元时的购买方案种类
  2. dp数组初始值设为1,dp[i]意义是,总花费是i元时,购买方案的种类数

代码实现:

package com.xjtu;

/**
 * @Author: cc雪影
 * @Description:
 */
public class A2020_03 {
    public static void main(String[] args) {
        int money = 200;
        int arr[] = {150, 100, 50, 50};

        System.out.println(dpGetresult(200, arr));
    }

    public static int dpGetresult(int money, int price[]) {
        int dp[] = new int[money + 1];
        dp[0] = 1;
        // dp[i]意义是,组建值为 i,方案的种类数
        for (int i = 0; i < price.length; i++) {//依次加入价值为 price[i]的商品
            for (int j = price[i]; j <= money; j++) {//从前往后遍历 dp 数组,更新 dp 数组的值
                dp[j] = dp[j] + dp[j - price[i]];
            }
        }
        return dp[money];
    }
}

输入输出:

11

2020年题目结束,这里是传送门:
西安交通大学915考研–编程题Java代码踩坑(2015年真题)
西安交通大学915考研–编程题Java代码踩坑(2016年真题)
西安交通大学915考研–编程题Java代码踩坑(2017年真题)
西安交通大学915考研–编程题Java代码踩坑(2018年真题)
西安交通大学915考研–编程题Java代码踩坑(2019年真题)

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值