HDU-2410 Barbara Bennett's Wild Numbers 数学题

来源:互联网 发布:压力测试软件 编辑:程序博客网 时间:2024/06/10 18:39

大致题意:
 开始看懂题花了点时间,要求确定w中 ? 的值,使 w>x,求这样的w有多少个?

解题思路:
 逐个数字进行比较,
 如果 ? 之前有w>x,则 ? 可取0-9;
 如果 ? 之前有w<x,则 ? 无取值;
 如果 ? 之前均为w=x, 则 ? 可取[x, 9],继续往下匹配;

 写几组例子就找到规律了:

w = ??
x = 12
ans = (9-1)*10 + (9-2)

w = ???
x = 123
ans = (9-1)*10*10 + (9-2)*10 + (9-3)

w = 2???
x = 1234
ans = 10*10*10

w = 1???
x = 2345
ans = 0

#include <iostream>#include <cstdio>#include <string.h>#include <math.h>using namespace std;int main(){    char w[105], x[105];    int i, len;    int ans, cnt;    while(~scanf("%s", w) && w[0]!='#')    {        ans = 0;        cnt = 0;   //标记'?'个数        scanf("%s", x);        len = strlen(w);        for( i = 0; i < len; i++)        {            if(w[i] == '?')                cnt ++;        }        for( i = 0; i < len; i++)        {            if(w[i] == '?')            {                ans += 0.5+(9-(x[i]-'0'))*pow(10,--cnt);            }            else if(w[i] < x[i])                break;            else if(w[i] > x[i])            {                ans += 0.5 + pow(10,cnt); //细节:若直接pow(10,cnt)会产生误差, +0.5调整误差(只有在正数的情况下可以这样做)                break;            }        }        printf("%d\n", ans);    }    return 0;}

不过在oj上提交测试的时候,不加0.5也能过。

0 0
原创粉丝点击