递增数 1002
来源:互联网 发布:二维矩阵 编辑:程序博客网 时间:2024/06/14 01:07
Problem Description
若一个正整数A,相邻位总是满足低位大于等于高位,则称之为递增数。
例如:1223,667 等都是递增数。
现在有个正整数X,请问有多少个正整数A满足1<=A<=X,且A为递增数。
例如:1223,667 等都是递增数。
现在有个正整数X,请问有多少个正整数A满足1<=A<=X,且A为递增数。
Input
输入数据第一行是一个正整数T(1<=T<=20),表示测试数据的组数。
接下来T行,每行一个正整数X(1<=X<=100000000)。
接下来T行,每行一个正整数X(1<=X<=100000000)。
Output
对于每组数据,输出一行答案,参见输出样例。
Sample Input
3520100
Sample Output
51854
//递增数 1002//Problem Description//若一个正整数A,相邻位总是满足低位大于等于高位,则称之为递增数。//例如:1223,667 等都是递增数。////现在有个正整数X,请问有多少个正整数A满足1<=A<=X,且A为递增数。// ////Input//输入数据第一行是一个正整数T(1<=T<=20),表示测试数据的组数。//接下来T行,每行一个正整数X(1<=X<=100000000)。// ////Output//对于每组数据,输出一行答案,参见输出样例。// ////Sample Input//3//5//20//100// ////Sample Output//5//18//54 //这题如果纯暴力肯定会超时,所以要用其他方式处理一下,网上说的贪心也挺好当时也想过,最早想到的是全排+回溯//这是我最早ac的题,因为1001跳了就看了1002 //大一不懂此算法的可以看我的注释,还不懂可以问我//我们还是边看边讲吧#include<cstdio>#include<string>#include<iostream>#include<cstring>using namespace std;int s;//s用来记录满足的数量 void di(int x,int cur,int mmax ,int v,int n)//这是一个递归函数,mmax用来记录这个数每一位数中最大值(比如35817,mmax=8) {//cur代表数现在的位数,v代表这个数的值,n是题目所给的 if(cur==x)//如果位数一样,则比较大小是否满足 { if(v<=n) s++;//满足数量+1 return ;//否则返回上个函数 } else { for(int i=0;i<=9;i++)//每个位上出现可能0-9 { int t=mmax;// if(i>=mmax)//如果要填的数大于mmax,满足条件,继续执行 { mmax=i;//最大值更新 cur++;//位数+1 v=v*10+i;//值变化 di(x,cur,mmax,v,n);//递归考虑下一位数 mmax=t;//这里是回溯的方法,差不多就是还原 cur--; v=v/10; } else ; } }}int main(){ int t,n; cin>>t; while(t--) { s=0;//初始化一定要注意 cin>>n; int x=0,y=n; while(y)//统计n的位数 { y=y/10; x++; } di(x,0,0,0,n);//进行全排 cout<<s-1<<endl;//s-1的原因是因为0也统计在内了 } return 0;}
0 0
- 递增数 1002
- hdu2016校赛1002递增数 dfs搜索
- 最大递增数
- 求最大递增数
- 求最大递增数
- 求最大递增数
- 最大递增数
- 最大连续递增数字串
- 递增进位制和递减进位制数
- 求最大连续递增数字串
- 求最大连续递增数字串
- 求最大连续递增数字串
- 求最大连续递增数字串
- 全排列-递增进位制数法
- 字符串的连续递增数字串
- HDU2016校赛:递增数(数位dp)
- 文件句柄数递增问题排查
- !递增 !
- 语音剪切程序
- css中设置table中的td内容自动换行
- sql中多表查询和链接查询的区别
- Ubuntu Linux 中常用命令总结
- win7 64位系统 注册 ocx控件
- 递增数 1002
- 关于css样式绝对定位、相对定位、固定定位的疑难杂症
- 安装PostgreSQL数据库
- socketpair机制
- 代理模式
- c/c++中const成员函数的返回值类型
- cpu优化
- Unity3D UGUI的一些注意点
- 2016年度盘点:一家典型互联网公司的必备工具宝箱