nyoj985带通配符的数
来源:互联网 发布:淘宝网页卖家中心在哪 编辑:程序博客网 时间:2024/04/29 08:44
题目链接:
或者:http://115.159.40.116/problem_show.php?pid=5545
描述
http://acm.nyist.net/JudgeOnline/problem.php?pid=985或者:http://115.159.40.116/problem_show.php?pid=5545
给定一个带通配符问号的数W,问号可以代表任意一个一位数字。
再给定一个整数X,和W具有同样的长度。
问有多少个整数符合W的形式并且比X大?
- 输入
- 多组测试数据。
每组数据两行。第一行代表W,第二行代表X,它们的长度相同,并且都不超过15。
提供几组测试数据:
?1234?5
1123455
???????????????
100000000000000
1234
1234
答案:
84
899999999999999
0
AC代码:#include <stdio.h>#include <string.h>#include <math.h>char w[20] = {0}, x[20];long long countFunction(int i) {//注意返回类型 long long ans = 0, flag = 0;//flag -1表示w小于x,1表示大于,0表示未知 for(; w[i] != 0; i++) { if(w[i] == '?') break; if(w[i] > x[i]) { flag = 1;//若在?前wi有大于xi的则w恒大于x ans = 1; break; } else if(w[i] < x[i]) { flag = -1;//若在?之前wi有小于xi的,则w恒小于x break; } //xi等于wi则继续循环,大小未知,直到遇到?,或字符串到末尾 } int con = 0, j = i+1; if(flag == 0 && w[i] != 0) {//大小未知且w[i]!=0说明i走到了?的位置 ans = '9'-x[i++];//算出此处wi恒大xi的个数 j = i; } if(flag != -1) {//flag=-1恒小时,ans=0,直接输出 for(; w[i] != 0; i++) if(w[i] == '?') con++; //因为是恒大所以直接统计后面的?个数 ,再ans = ans*pow(10,con); 即可 ans *= ceil(pow(10.0,con)); }//未知其实是?与?前面等于x,?后面未知,故递归求之;?处恒大于x的情况前面已计算在ans中 if(flag == 0 && w[j] != 0) ans += countFunction(j); return ans;}int main() { while(~scanf("%s%s", w, x)) { printf("%lld\n", countFunction(0)); memset(w,0,sizeof(w)); } return 0;}
0 0
- nyoj985带通配符的数
- 带通配符的数
- 带通配符的数
- 带通配符的数
- 带通配符的数
- CSDN 带通配符的数
- 问题 : 带通配符的数
- csdn编程挑战 带通配符的数
- 带通配符的数——Java版
- 带通配符的整数
- 带通配符的问题
- 带通配符*的字符串匹配
- 带通配符的字符串比较
- 带通配符*和?的kmp
- 带通配符的字符串匹配
- 带通配符的字符串匹配
- 第四届在线编程大赛·线上初赛:带通配符的数-我的解题方法
- 英雄会第四届在线编程大赛·线上初赛:带通配符的数
- 【bzoj3038】上帝造题的七分钟2 线段树
- Jmeter测试应用系统的并发
- eclipse配置tomcat,访问http://localhost:8080出现404错误,项目正常进行
- 重温《JAVA编程思想》----2017.1.20 类型信息+反射(完结)
- qt opengl lesson6 给立体图形绘制纹理
- nyoj985带通配符的数
- 图像LSD直线检测
- 排序算法专题
- Java虚拟机运行时数据区
- ionic--windows环境下搭建ionic环境
- POJ - 3083 Children of the Candy Corn 解题报告
- 微信小程序开发博客项目-篇幅《一》
- rpm包的安装
- HDU1503:Advanced Fruits(LCS+打印路径)