首页 > 代码库 > 12、分饼干--2017网易春招
12、分饼干--2017网易春招
[编程题] 分饼干
时间限制:1秒
空间限制:32768K
易老师购买了一盒饼干,盒子中一共有k块饼干,但是数字k有些数位变得模糊了,看不清楚数字具体是多少了。易老师需要你帮忙把这k块饼干平分给n个小朋友,易老师保证这盒饼干能平分给n个小朋友。现在你需要计算出k有多少种可能的数值
输入描述:
输入包括两行:
第一行为盒子上的数值k,模糊的数位用X表示,长度小于18(可能有多个模糊的数位)
第二行为小朋友的人数n
输出描述:
输出k可能的数值种数,保证至少为1
输入例子:
9999999999999X 3
输出例子:
4
解题思路:
状态:d[i][j]:表示前i个模n余j的数量;
状态转移:d[i][newj]+=d[i-1][j];(newj分为第i位是否为‘X’两种情况);
ps:对于前i位而言,前i-1位的余数会贡献到第i位上,即(j*10+当前数字(分为是否为具体数字两种情况));
初始化:d[0][0]=1;
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 6 long long d[20][10000]; 7 8 int main() 9 { 10 char s[20]; 11 gets(s); 12 int n; 13 scanf("%d",&n); 14 memset(d,0,sizeof(d)); 15 d[0][0]=1; 16 int len=strlen(s); 17 for(int i = 1; i <= len; i++) 18 for(int j = 0; j < n; j++) 19 if( s[i-1] == ‘X‘ ) 20 for(int k = 0; k <= 9; k++){ 21 int newJ = (j*10+k)%n; 22 d[i][newJ] += d[i-1][j]; 23 } 24 else 25 { 26 int newJ = (j*10+(s[i-1]-‘0‘))%n; 27 d[i][newJ] += d[i-1][j]; 28 } 29 printf("%lld\n",d[len][0]); 30 return 0; 31 }
12、分饼干--2017网易春招
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。