网易2017春招[编程题]分饼干@Java

本文介绍了一道编程题“分饼干”的解决方案,通过动态规划的方法高效地计算出能够被平均分配给指定数量小朋友的饼干总数的可能性。文章提供了一个Java实现的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:https://www.nowcoder.com/questionTerminal/44d0ee89b51b4725b403d1df2381d2b2
来源:牛客网

[编程题]分饼干
易老师购买了一盒饼干,盒子中一共有k块饼干,但是数字k有些数位变得模糊了,看不清楚数字具体是多少了。易老师需要你帮忙把这k块饼干平分给n个小朋友,易老师保证这盒饼干能平分给n个小朋友。现在你需要计算出k有多少种可能的数值
输入描述:
输入包括两行:
 第一行为盒子上的数值k,模糊的数位用X表示,长度小于18(可能有多个模糊的数位)
 第二行为小朋友的人数n


输出描述:
输出k可能的数值种数,保证至少为1
示例1

输入

9999999999999X 3

输出

4

package go.jacob.day918;

import java.util.Scanner;

/**
 * [编程题]分饼干
 * 
 * @author Jacob 
 * Long表示范围为-9223372036854775808到9223372036854775807(19位)
 */
public class Demo1 {
	/*
	 * 动态规划求解
	 * 用暴力解法会超时
	 */
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		int len = s.length();
		int n = sc.nextInt();
		// dp[i][j]表示前i位(高位开始)余数为j的个数
		long[][] dp = new long[len + 1][n];
		dp[0][0] = 1;// 初始化
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < n; j++) {
				// 如果当前位为X,用0-9带入
				if (s.charAt(i) == 'X') {
					for (int k = 0; k <= 9; k++) {
						dp[i + 1][(j * 10 + k) % n] += dp[i][j];
					}
				} else {// 如果当前位上的数字为不为X,用具体值带入
					dp[i + 1][(j * 10 + s.charAt(i) - '0') % n] += dp[i][j];
				}
			}
		}
		System.out.println(dp[len][0]);
		sc.close();
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值