`

一个关于得到数字个数的问题?

阅读更多

 

今天遇到这样一个问题? 
我想得到1000000之内包含2、8、00这几个数字的个数? 
要求这个数字里必须有2,8,和两个0,这些数字的位置可以是任意的排放。 
我也得到结果啦,不过算法很复杂,请问如果用正则表达式要怎么去实现? 
以下是本人的复杂算法: 
@Test 
public void testNum() { 
int num = 1000000; 
int m = 1; 
for (int i = 2000; i < num; i++) { 
String x = "" + i; 
for (int j = 0; j < x.length(); j++) { 
// System.out.print(x.charAt(j)); 
String temp = String.valueOf(x.charAt(j)); 
// 得到的包含数字2的所有值 
if (temp.equals("2")) { 
// System.out.println(x); 
for (int a = 0; a < x.length(); a++) { 
String temp1 = String.valueOf(x.charAt(a)); 
// 决断数字中是否包含数字8 
if (temp1.equals("8")) { 
// System.out.println(x); 
for (int b = 0; b < x.length(); b++) { 
// 得到当前 
String temp2 = String.valueOf(x.charAt(b)); 
int q = x.indexOf("0"); 
if (x.indexOf("0", q + 1) > 0) { 
// System.out.println(x); 
m++; 








System.out.println("得到数量:" + m / 5); 
}



不用正则表达式的,把你的算法改进一下就好了: 


public class Matcher {
private int mark = 0;

public void match(int digit) {
switch (digit) {
case 0:
mark |= (0 < (mark & 1)) ? 2 : 1;
break;
case 2:
mark |= 4;
break;
case 8:
mark |= 8;
break;
}
}

public boolean isMatched() {
return (mark & 15) > 0;
}
}
//.....
int count = 0;
for (int i = 2000; i < 1000000; i++) {
Matcher matcher = new Matcher();
for (int num = i; num > 0; num /= 10) {
matcher.match(num % 10);
}
if (matcher.isMatched()) {
count++;
}
}
//.....


 

分享到:
评论

相关推荐

    删数问题给定n 位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个

    对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数 最小的删数方案。 «编程任务: 对于给定的正整数a,编程计算删去k个数字后得到的最小数。 Input 由文件input.txt提供输入数据。文件的第1...

    C++ 贪心算法 删数问题

    对于一个有 n 个数字的正整数 a, 去掉其中任意 k (≤ n) 个数字后, 剩下的数字按原次序排列组成一个新的正整数. 本题对于给定的正整数 a, 请计算删去 k 个数字后得到的最小数. Input 有多个测试用例. 每个测试...

    删数问题(算法)

    试着设计一个算法,找出删去k个数,剩下数字组成的新数最小的删数方案。 输入格式 可输入多组测试数据(不超过50组测试数据),每组测试数据分两行,每行一个数,数的含义如下。 第一行:正整数a(a是大于0的一个n...

    数字母个数

    数字母个数

    从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。

    从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。 处理方法: 1、定义一个字符串数组,保存汉字数字 2、然后将传入的数字转换成字符串,...

    数字反转

    给定一个整数,请将该数各个位上的数反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。 Input 输入有多组数据,每组数据就一行为一个整数N(-...

    依次去掉n中的某一位数字,得到m个整数,并将这m个整数按从小到大的次序排列后输出.docx

    【题目】将一个m位(m&gt;1)的正整数n,依次去掉n中的某一位数字,得到m个整数,并将这m个整数按从小到大的次序排列后输出。 例如,对于整数387,依次去掉其中一位后,得到三个数:87、37、38,排序后为:37、38、87...

    猜数字游戏 C语言版

    玩家尝试输入一个n位数,得到数字对个数和数字与位置均对个数的反馈,直到完全猜中这个数为止。 如:随机数为123,玩家猜421,则数字对个数2(即1和2在两个数中均有),数字与位置均对个数为1(只有2的数字与位置都...

    数字翻译为英文的c++实现

    3、 要考虑输入溢出问题,此时可以在用户输入后加一个判断,若超出存储数组的最大限度则给用户错误警告并退出。 4、 输出:考虑到格式,如zero-two,最后一个字符后没有“-”,所以最后一个字符要单独输出。

    编写一个java应用程序。用户从键盘输入一个1-9999之间的数

    回文数是指将数含有的数字逆序排列后得到的数和原数相同,例如12121,4224,6778776等都是回文数。 1)程序具有判断用户的输入是否为合法整数的功能。对非法输入(例如含有字母)要进行处理。 2)要判断输入数的位数,...

    一个素数,当她的数字位置对换以后仍为素数,这样的数称为绝对素数。

    一个素数,当她的数字位置对换以后仍为素数,这样的数称为绝对素数。

    24数源码:给您4个数字,不论您如何计算,您能计算得到24吗?

    给您4个数字,不论您如何计算,您能计算得到24吗?完全由本人独立开发,现免费提供,供广大爱好者使用。功能演示网址:http://njl.sysyedu.cn/wup/pic/24/

    黑洞数也称为陷阱数,又称“Kaprekar问题”

    任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。例如,对三位数207:第1次重排...

    C语言入门习题:寻找完数(输出形式为“数字,数字,……,数字”)

    完数是指一个整数恰好等于它的因子之和(除自身外),则称这个数为完数。从键盘先后输入两个不大于9999的正整数m和n,若m&gt;n,则交换两数。然后求m~n(m和n均为正整数且m≤n)之间的所有完数。 【输入形式】 先后...

    删数问题(算法分析)ACM

    对于一个有 n 个数字的正整数 a, 去掉其中任意 k (≤ n) 个数字后, 剩下的数字按原次序排列组成一个新的正整数. 本题对于给定的正整数 a, 请计算删去 k 个数字后得到的最小数. Input 有多个测试用例. 每个测试...

    数字黑洞 c语言

    任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,...

    java 实现判断一个数是否是回文数

    编写一个Java应用程序。用户从键盘输入一个1~99999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,如12121和3223都是回文数

    编写一个java应用程序识别数位及回文数

    回文数是指将数含有的数字逆序排列后得到的数和原数相同,例如12121,4224,6778776等都是回文数。 1)程序具有判断用户的输入是否为合法整数的功能。对非法输入(例如含有字母)要进行处理。 2)要判断输入数的位数,...

    数字验证码2

    数字验证码的demo,该demo需要引入jQuery,相比于我的另一篇,该页面更简洁

    读取配置文件获得数字进行计算

    读取配置文件获得数字进行计算读取配置文件获得数字进行计算读取配置文件获得数字进行计算

Global site tag (gtag.js) - Google Analytics