windy数(java)

输入1 10 输出 9 输入25 50 输出 20

dp[i][j] 表示第i位的数为j
那么 dp[i][j]=dp[i-1][k] abs(j-k)>=2
初始值 dp[1][k] =1 1<=k<=9 // 1-9都是windy数

具体代码看代码注释

import java.util.Scanner;/*** windy 定义了一种 windy 数。** 题目描述* 不含前导零且相邻两个数字之差至少为 22 的正整数被称为 windy 数。windy 想知道,* 在 aa 和 bb 之间,包括 aa 和 bb ,总共有多少个 windy 数?* 输入* 1 10* 输出* 9* 输入* 25 50* 输出* 20*/
public class Main {int[][] dp=null;int[] a=null; // 记录每一位上面的数字void init(){a=new int[11];dp=new int[11][11];for (int i = 0; i <=9 ; i++) {dp[1][i]=1; // 0,1,2..9都属于windy数}for (int i = 2; i <11 ; i++) {for (int j = 0; j <=9 ; j++) {for (int k = 0; k <=9 ; k++) {if(Math.abs(j-k)>=2){dp[i][j]+=dp[i-1][k];}}}}// 从最高位i=2开始,每次枚举最高位值j并找到k,使得j-k>=2}int work(int x){ //计算<=x的数int len=0,ans=0;while (x!=0){// 将x每一位数字放到a[i]中a[++len]=x%10;x=x/10;}// 分为几个模块,先求len-1位的windy数,必定包含在区间里的for (int i=1;i<=len-1;i++){for (int j = 1; j <=9 ; j++) {ans+=dp[i][j];}}// 求len位的windy数,且小于a[len]的值for (int i =1 ; i <a[len] ; i++) {ans+=dp[len][i];}// 求len的windy数,且等于a[len]的值for (int i = len-1; i >=1 ; i--) {// i从最高位后开始枚举for (int j = 0; j <=a[i]-1 ; j++) {// J是i位上的数if(Math.abs(j-a[i+1])>=2){ // 判断和上一位相差2以上ans+=dp[i][j];}}if(Math.abs(a[i+1]-a[i])<2){break; //当高位不满足wendy数的时候,低位满足也没用}}return ans;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);int a = scan.nextInt();int b = scan.nextInt();// dp[i][j] 表示第i位的数为j// 那么 dp[i][j]=dp[i-1][k]  abs(j-k)>=2// 初始值 dp[1][k] =1  1<=k<=9  // 1-9都是windy数Main main = new Main();main.init();System.out.println(main.work(b+1)-main.work(a));scan.close();}
}

转自

windy定义了一种windy数,不含前导零且前两个数字只差至少为2的正整数被称为windy数,求A和B之间windy数的个数相关推荐

  1. 比较两数大小c语言,C语言比较两个数字的大小

    问题描述: C语言比较两个数字的大小 #include int max(int a,int b); main() { int x,y; printf("input two numbers:\ ...

  2. python练习题(python之“求一个数的阶乘并求结果中从后向前数第一个不为0(零)的数” 等)

    实验环境:python2.7 题目1:python之"求一个数的阶乘并求结果中从后向前数第一个不为0(零)的数" 程序: import math def factorial(n): ...

  3. Java黑皮书课后题第6章:**6.26(回文素数)回文素数是指一个数同时为素数和回文数。编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开

    6.26(回文素数)回文素数是指一个数同时为素数和回文数.编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开 题目描述与运行示例 代码 题目描述与运行示例 6.26(回文素数) ...

  4. 编写程序,随机产生20个0到1之间的数,将这20个数写入文本文件中,要求每行5个数

    import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOEx ...

  5. C# 定义了 7 种变量类别:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量

    摘要:2012年09月30日歪曲事实中秋佳节快乐除了撞单,我又交待道,不要轻易过去面谈,功能上差不多,那个单是早就谈好了的,不知道他的目的是什么,招聘中人员的中秋佳节快乐分配也是经理们比较在意的,怎么 ...

  6. 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。

    已知数据文件IN13.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsValue(),其功能是:求出千位数上的数加百位数上的数等于十位数上的数加个位 ...

  7. 编制一个函数jsValue(),求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的四位数的平均值pjz1,以及不满足此条件的四位数的平均值pzj2

    已知数据文件IN15.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数 ...

  8. 合并数字 — m个数字消除相邻的差的绝对值为1的两个数中较大的那一个,直到没有两个相邻的差的绝对值为 1 的数(动态数组定义)

    题目:合并数字 消除相邻的差的绝对值为1的两个数中较大的那一个.这一天,她得到了 m 个数字,她只能选出最左边的相邻的差的绝对值为 1 的两个数,保留较小的数,泯灭较大的数,直到没有两个相邻的差的绝对 ...

  9. 一个完全平方数是指一个数乘以自己,例:625=25^2; 特殊的完全平方数是指不仅是完全平方数而且平方后的数中有两个数字是相同的,例: 100=10^2; 144=12^2;

    一人烤人曰..... 特殊的完全平方数   一个完全平方数是指一个数乘以自己,例:625=25^2; 特殊的完全平方数是指不仅是完全平方数而且平方后的数中有两个数字是相同的,例: 100=10^2; ...

最新文章

  1. 百度地图 osm地图 leaflet echarts webapck的组合使用时的踩坑记录
  2. hdu 4033 二分几何
  3. CHM文件不能正确显示
  4. 机器学习中为啥要有验证集?只要训练集和测试集不就可以了吗?
  5. fedora 16 mysql远程连接
  6. UWP 推荐 | 限时免费的RSS阅读器《RSS 追踪》登录 Windows 10
  7. 【DP】小明在边塞(jzoj 2147)
  8. Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析【转】
  9. SpringBoot2.1.5(15)---配置Profile多环境支持
  10. 具有审计表的实体框架
  11. Servlet--ListenerFilter
  12. ndoejs后台查询数据库返回的值-进行解析
  13. mysql取出qq表情_mysql存储emoji表情报错处理,qq互联mysql存储昵称中带表情的数据时报错。...
  14. 前端使用cesium加载地球
  15. 魏俊妮《非人力资源的人力资源管理技术提升》课程大纲
  16. knn代码实现+可视化
  17. 【真北读书】弗兰克意义三途径,让你人生的意义不漂移
  18. SpringCloud入门之项目实例
  19. 致此刻选专业发愁的你 | 从学技术到做CEO:电子信息类专业在大学时期的正确打怪升级路径
  20. GAIN: Missing Data Imputation using Generative Adversarial Nets学习笔记

热门文章

  1. C++ 模板函数的使用
  2. 基本概念学习(7003)---网络流量
  3. 解决office的PPT和WPS的PPT不兼容的问题
  4. Ventoy多镜像+防毒全能U盘工具箱
  5. 重要提醒:你有一份专属红包封面待查收!
  6. 2021年施工员-装饰方向-岗位技能(施工员)免费试题及施工员-装饰方向-岗位技能(施工员)复审考试
  7. Linux:搭建GIT服务,Linux中使用git,git基础命令,和原理
  8. to写日志or not to写日志,is a question.-.-
  9. 【学术论文】查找论文、查找并理解配套代码(持续更新~)
  10. 10019---初探JVM