zoukankan      html  css  js  c++  java
  • 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
    ",d[len][0]);
    30     return 0;
    31 }
  • 相关阅读:
    mysql触发器实时检测一条语句进行备份删除
    ORA-12560: TNS: 协议适配器错误 windows
    DG:windows密码文件
    vim already exists!
    k8s 集群升级
    部署 k8s 备份工具 velero
    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    lens 添加 k8s 集群
    redis系列
    s3c2440裸机-I2c编程-3.i2c中断服务程序
  • 原文地址:https://www.cnblogs.com/qqky/p/6939788.html
Copyright © 2011-2022 走看看