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 }
  • 相关阅读:
    Nginx 413 Request Entity Too Large
    Docker 搭建一个多端同步网盘-Nextcloud
    FTP主动模式(PORT)与被动模式(PASV)
    Linux安装与使用FTP服务-vsftpd
    Mac FTP工具推荐-Transmit
    Nginx配置动静分离
    Nginx解决跨域问题(CORS)
    CentOS 7 之找回失落的ifconfig
    CentOS 7 之安装篇
    深入研究MiniMVC之后续篇
  • 原文地址:https://www.cnblogs.com/qqky/p/6939788.html
Copyright © 2011-2022 走看看