A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尹善波   /  2012-6-29 18:08  /  4519 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘蕴学 于 2012-6-30 18:04 编辑

我也凑个热闹
  1. public class Count
  2. {
  3.         public static void main(String[] args)
  4.     {
  5.                 System.out.println("出现总次数为:" + getValueCount(0, 99, 5));
  6.     }
  7.         
  8.         public static int getValueCount(int begin, int end,int num)
  9.         {
  10.                 int tmp = begin;
  11.                 int count = 0;
  12.                 while(true)
  13.                 {
  14.                         if(tmp % 10 == num)
  15.                                 count++;
  16.                         if(tmp < 10)
  17.                         {
  18.                                 if(0 != count)
  19.                                         System.out.println("Value=" + begin + "   Count=" + count);
  20.                                 if(end == begin)
  21.                                         return count;
  22.                                 else
  23.                                         return count + getValueCount(begin + 1, end, num);
  24.                         }
  25.                         tmp /= 10;
  26.                 }
  27.         }
  28. }
复制代码
  1. 控制台输出

  2. Value=5   Count=1
  3. Value=15   Count=1
  4. Value=25   Count=1
  5. Value=35   Count=1
  6. Value=45   Count=1
  7. Value=50   Count=1
  8. Value=51   Count=1
  9. Value=52   Count=1
  10. Value=53   Count=1
  11. Value=54   Count=1
  12. Value=55   Count=2
  13. Value=56   Count=1
  14. Value=57   Count=1
  15. Value=58   Count=1
  16. Value=59   Count=1
  17. Value=65   Count=1
  18. Value=75   Count=1
  19. Value=85   Count=1
  20. Value=95   Count=1
  21. 出现总次数为:20
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 我也来凑热闹!!

查看全部评分

回复 使用道具 举报
本帖最后由 feigecal 于 2012-6-30 18:11 编辑
孔令金 发表于 2012-6-30 07:24
提供一个新的思路吧,不足之处请大家斧正哈。
    public static void main(String[] args) {
        int  ...


用或的时候就已经包括了55的情况 了,所以下面不用再判断了,我按你的思路写了一下
class Test
{
public static void main(String[] args)
{
  int x=0;
  for (int y=0;y<10 ;y++ )
  {
   for (int z=0;z<10 ;z++ )
   {
    if (y==5||z==5)
    {
     System.out.print((y*10+z)+" ");
     x++;
    }
   }
  }
  System.out.println();
  System.out.println("5出现的次数"+x);
}
}
打印结果为:
5  15  25  35  45  50  51  52  53  54  55 56  57  58  59  65  75  85  95
5出现的次数19

点评

改帖子。。。html代码都整出来了  发表于 2012-6-30 18:05
回复 使用道具 举报
刘蕴学 发表于 2012-6-30 18:00
我也凑个热闹

你这种效果是怎么弄出来的,是截图还是什么?我想搞这样效果的,结果搞成html代码了,呵呵
回复 使用道具 举报
feigecal 发表于 2012-6-30 18:02
用或的时候就已经包括了55的情况 了,所以下面不用再判断了,我按你的思路写了一下
class Test
{

题目要求是”计算数字5出现的次数“,不是计算”含有数字5的数出现的个数“,这两者还是有区别的。因此数字5出现了20次,含5的数有19个。
回复 使用道具 举报
本帖最后由 feigecal 于 2012-6-30 18:38 编辑
孔令金 发表于 2012-6-30 18:21
题目要求是”计算数字5出现的次数“,不是计算”含有数字5的数出现的个数“,这两者还是有区别的。因此数 ...


理解错题意了,呵呵,你是正确的
class Test
{
public static void main(String[] args)
{
  int x=0;
  for (int y=0;y<10 ;y++ )
  {
   for (int z=0;z<10 ;z++ )
   {
    if (y==5||z==5)
    {
     System.out.print((y*10+z)+" ");
     x++;
    }
    if (y==5&&z==5)
    {
     System.out.print("\"55中出现了两次5\""+" ");
     x++;
    }
   }
  }
  System.out.println();
  System.out.println("5出现的次数"+x);
}
}
回复 使用道具 举报
feigecal 发表于 2012-6-30 18:15
你这种效果是怎么弄出来的,是截图还是什么?我想搞这样效果的,结果搞成html代码了,呵呵 ...

点编辑里边有<>这样的图标,你在里边粘贴下代码就行了
回复 使用道具 举报
刘蕴学 发表于 2012-6-30 18:53
点编辑里边有这样的图标,你在里边粘贴下代码就行了

嗯,谢了
回复 使用道具 举报
本帖最后由 邵阳 于 2012-6-30 20:28 编辑

终于得出正确的啦
class Test
{
        public static void main(String[] args)
        {
                        int count=0;
                        
            for(int i = 0; i < 100; i++)
            {
                 int num=i;
                 while(num > 0)
                                {
                                        if(num % 10==5)
                    {
                                                count=count+1;
                         System.out.println(i);              
                    }
                       num/= 10;
                    }  
                        
            }
            System.out.println("一共出现的次数:" + (count));
               
        }

}

D:\java\zuoye\ceshi1>java  Test
5
15
25
35
45
50
51
52
53
54
55
55
56
57
58
59
65
75
85
95
一共出现的次数:20
回复 使用道具 举报
在想要实现需求的时候,脑子里不要光想着代码要怎么写,这样就会陷入一个僵局,毕老师的视频一再强调,要有思路。代码都是思想的产物

比如:

需求:在0~99之间的一百个整数中计算数字5出现的次数,并将带有数字5的组合输出。

思路:只要含有5,就给输出,并计数。
         那么:1,遍历0到99之间所有的整数,以供去寻找符合要求的数字。
               2,只要含5就输出,那么需要将数字的十位和个位取出来,只要其中一个有5,就满足条件。
               3,计算个数,这是需要用到计数器思想,即,满足条件,就++。

结合以上思路,一个代码就出来了。,所以,我建议以后遇到问题都这样分析一下,毕竟,工作以后,很多问题都需要自己独立解决。
而思路,就是你解决问题的关键!
回复 使用道具 举报
看见很多人用不同的方法都能做出来.下面也分享下我的想法吧.我用的是正则表达式.
package Test;
public class getFive_Demo {
/**
  * 在0~99之间的一百个整数中计算数字5出现的次数,并将带有数字5的组合输出。
  */
public static void main(String[] args) {
  String reg = ".?5";
  String reg1 = "5.";
  String reg2 = "55";
  int count = 0;
  String s = null;
  for (int i = 0; i < 100; i++) {
    s = i+"";//将i的值转换为字符串.因为只有字符串菜鸟皮喷正则表达式
    //这里是判断只有1个5出现的情况
   if(s.matches(reg)||s.matches(reg1)){
    count++;
   }
   //这里判断有2个55出现的情况
   if(s.matches(reg2)){
    count++;
   }
  }
   System.out.println(count);
  
}
}

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报
int count = 0;  
                int one = 0;        //个位的数
                int ten = 0;        //十位的数
        for(int i=0; i<100; i++) {
               
                if(i<10) {                //if else分开处理1位数和2两位
                        one = i%10;
                        if(one == 5) {
                                count ++;
                                System.out.println(i);
                        }
                } else {
                        one = i%10;
                        ten = i/10;
                        if(one == 5) {count ++; System.out.println(i);}
                        if(ten == 5) {count ++; System.out.println(i);}
                }       
        }
        System.out.println("count:" + count);
这种思路处理3位数也是OK的

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1 想想怎么可以取到每一位

查看全部评分

回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马