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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 打工人 金牌黑马   /  2012-10-27 12:34  /  4951 人查看  /  36 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯海霞 于 2012-10-27 15:11 编辑

题目要求:判断并打印由0-7组成的n位和n位以下奇数的个数以及这些数中3位数中的回文数
                  假设 n= 5
                注:回文数:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。

评分

参与人数 1黑马币 +30 收起 理由
杨千里 + 30 大家一起来围观

查看全部评分

36 个回复

倒序浏览
数字是可以重复的,才有回文数,
但是数字可以重复,0~6就可以组成无数个奇数了,又没限制位数
回复 使用道具 举报
同上!!!
回复 使用道具 举报
刘伟平 发表于 2012-10-27 13:09
数字是可以重复的,才有回文数,
但是数字可以重复,0~6就可以组成无数个奇数了,又没限制位数 ...

对不起,同学,我大意了。改好了
回复 使用道具 举报
种生祥 发表于 2012-10-27 13:10
同上!!!

对不起,同学,我大意了。改好了
回复 使用道具 举报
请楼主点评

public class JiDemo
{
                   public static void main(String[] args)
                   {
                                                   int count = 0;
                                                   int odd = 0;
                                                   //声明由数字组成的数
                                                   int n = 8;
                                                   //一位数
                                                   count = n/2;
                                                   //两位数
                                                   count += (n-1)*n/2;
                                                   //三位数
                                                   count += (n-1)*n*n/2;
                                                   //四位数
                                                   count += (n-1)*n*n*n/2;
                                                   //五位数
                                                   count += (n-1)*n*n*n*n/2;
                                                   //六位数
                                                   count += (n-1)*n*n*n*n*n/2;
                                                   //七位数
                                                   count += (n-1)*n*n*n*n*n*n/2;
                                                  
                                                   //回文数 首末尾为奇数:n/2种
                                                   //       第二位和倒数第二位:n种 中间:n种
                                                   odd = n/2*n*n;
                                                  
                                                   System.out.println("0-7所能组成的奇数个数:"+count);
                                                  
                                                   System.out.println("这些奇数中五位数中的回文数个数:"+odd);
                                                  
       }
}

评分

参与人数 1黑马币 +6 收起 理由
古银平 + 6 数学计算,鼓励下,题目改好了,你在做下吧.

查看全部评分

回复 使用道具 举报
本帖最后由 种生祥 于 2012-10-27 14:21 编辑

{:soso_e101:}...   
回复 使用道具 举报
种生祥 发表于 2012-10-27 14:17
...

咋了咋了,是不是还有问题?我觉得没问题了吧
回复 使用道具 举报
{:soso_e105:} 一看见数学题,头就疼.咋整

点评

真实姓名请修改为真实姓名  发表于 2012-10-27 16:37

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 好好努力

查看全部评分

回复 使用道具 举报
坚持不懈 发表于 2012-10-27 14:36
一看见数学题,头就疼.咋整

这个不是纯数学题嘛,不要让别人的代码影响了你的思路
回复 使用道具 举报
本帖最后由 王自强 于 2012-10-27 17:37 编辑
  1. /*
  2. *题目要求:判断并打印由0-7组成的n位和n位以下奇数的个数以及这些数中3位数中的回文数
  3.                   假设 n= 5
  4.                 注:回文数:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。
  5. * */
  6. public class Plalindrome {
  7.     public static void main(String[] args) {        
  8.         System.out.println("奇数个数为:" + oddCount1(5));   
  9.         
  10.         int n = 3;
  11.         System.out.println(n+"位数的回文数个数为:" + plalindromeCount1(n));
  12.         
  13.         System.out.println(printPlalindrome());
  14.     }
  15.     //返回由0-7组成的digit位的奇数个数
  16.     public static int  oddCount1(int digit){
  17.         double count = 0;
  18.         while(digit >= 2){
  19.             count += 7*(Math.pow(8, digit-2))*4;               
  20.             digit--;
  21.         }
  22.         return (int)(count+4);        
  23.     }   
  24.     //返回奇数中的digit位的回文数个数
  25.     public static int plalindromeCount1(int digit){
  26.    
  27.         double count = (Math.pow(8, (digit-1)/2))*4;   
  28.    
  29.         return (int)count;
  30.     }   
  31.     //返回奇数中的三位数的回文数值
  32.     public static int printPlalindrome(){
  33.         int count = 0;
  34.         int number ;
  35.         System.out.println("三位数的奇数的回文数有");
  36.         for(int x1=0; x1<=7; x1++){
  37.             for(int x2=0; x2<=7; x2++){
  38.                 for(int x3=0; x3<=7; x3++){        
  39.                     //由0-7组成的所有三位数
  40.                     number =x3*1+x2*10+x1*100;
  41.                     //将数字转成字符串,以方便进行回文数的判断
  42.                     String str = String.valueOf(number);
  43.                     //判断字符串的值是否是一个回文数
  44.                     boolean flag = new StringBuilder(str).reverse().toString().equalsIgnoreCase(str);
  45.                     //如果数字是三位的 && 是奇数 && 是回文数,count增加1,并打印出来它
  46.                     if( number>=100 && number <=1000 && (number%2 ==1) && flag){
  47.                         count++;                                
  48.                         System.out.print(number+",");
  49.                     }                                            
  50.                 }
  51.             }
  52.         }
  53.         System.out.println("");
  54.         System.out.println("回文数的个数是:");
  55.         return count;
  56.     }
  57. }

复制代码

评分

参与人数 1黑马币 +10 收起 理由
古银平 + 10 我看晕了,这么多嵌套循环,题目改了.

查看全部评分

回复 使用道具 举报
不能沉。。。。。。。。。。。。
回复 使用道具 举报
本帖最后由 845616011 于 2012-10-27 17:50 编辑

好像现在脑子越来越笨了,总是看不懂题目要求,但是注倒是看懂了:判断一个数是否为回文!!比如说五位回文,只是万位跟个位相等,千位跟十位相等。
这里取万位,千位,十位和个位其实是有规律的,以前在课堂上玩出来的,用的是/取整,%取余。什么规律我也不知道怎么说,这个只可意会不可言传!我只知道后面的叔取余,前面的取整。单取一次还不够的话,再这样循环。这时再去判断万位和个位是否相等,同时千位和十位是否相等。
int i=12345;
System.out.println(i/10000);        //万位
System.out.println(i/1000%10);        //千位
System.out.println(i/100%10);        //百位
System.out.println(i%100/10);        //十位
System.out.println(i%10);        //个位
  1. package com.efoxconn.util;

  2. public class HuiWenTest {
  3. /*
  4. * 题目要求:判断并打印由0-7组成的n位和n位以下奇数的个数以及这些数中3位数中的回文数,假设 n= 5。
  5. * 注:回文数:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。
  6. */

  7. public static void main(String[] args){
  8. getJCount();
  9. getHCount();
  10. }
  11. /*
  12. * 0到7组成的五位及以下的数,最小为0,最大为77777。
  13. */
  14. public static void getJCount(){
  15. int count=0;
  16. for(int i=0;i<=77777;i++){
  17. if(i%2==1){
  18. count++;
  19. }
  20. }
  21. /*
  22. * count=i/2+1;
  23. */
  24. System.out.println("77777以下中有"+count+"个奇数!!");
  25. }
  26. /*
  27. * 回文要么五位数,要么三位数
  28. */
  29. public static void getHCount(){
  30. int count=0;
  31. int count1=0;
  32. int count2=0;
  33. for(int i=0;i<=77777;i++){
  34. //首先判断是否为奇数,不是continue
  35. if(i%2==1){
  36. //判断是否为五位数,如是,当万位跟个位相等,并且千位跟十位相等时,视为回文
  37. if((i>10000)&&(i<77777)){
  38. int wan=i/10000; //取万位
  39. int qian=i/1000%10; //取千位
  40. int shi=i%100/10;
  41. int ge=i%10;
  42. if(wan==ge&&qian==shi){
  43. count++;
  44. count1++;
  45. }
  46. //潘但是否为三位数,如是,当个位和百位相等时,视为回文
  47. }else if((i>100)&&(i<1000)){
  48. int bai=i/100;
  49.    int ge=i%10;
  50. if(bai==ge){
  51. count++;
  52. count2++;
  53. }
  54. }
  55. }
  56. continue;
  57. }
  58. System.out.println("其中有"+count+"个回文!!");
  59. System.out.println("10000-77777间有"+count1+"个回文!!");
  60. System.out.println("100-1000中有"+count2+"个回文!!");
  61. }
  62. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
“这些数中3位数中的回文数”是指0-7组成的3位数的回文个数?
就是121,131这些?
回复 使用道具 举报
845616011 发表于 2012-10-27 15:41
好像现在脑子越来越笨了,总是看不懂题目要求,但是注倒是看懂了:判断一个数是否为回文!!比如说五位回文 ...

那就以你的思想写出代码,
回复 使用道具 举报
官仁杰 发表于 2012-10-27 15:47
“这些数中3位数中的回文数”是指0-7组成的3位数的回文个数?
就是121,131这些? ...

用代码表示出来
回复 使用道具 举报
本帖最后由 落叶街 于 2012-10-27 16:52 编辑

public class Demo1 {

        /**
         * @param java新手 用for循环嵌套一个一个取出奇数
         * 奇数个数:1048576
         * 3位数的回文数个数:32
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                lens();
        }
        public static void lens()
        {
                int jiLens = 0 ,hwLens = 0 ,num = 0 , len_1 = 0 , len_2 = 0 ;
                int len_3 = 0 ,        len_4 = 0 , len_5 = 0 , len_6 = 0, len_7 = 0 ;
                //1位 数的时候  奇数个数 和回文数个数
                for(int i=0;i<=7;i++)
                {
                        if(i%2==1)
                        {
                                len_1++;
                                //System.out.println("奇数:"+i);
                        }
                }
                //2位  数的时候  奇数个数 和回文数个数
                for(int i=1;i<=7;i++)
                {
                        for(int j=0;j<=7;j++)
                        {
                                num = i*10 + j ;
                                if(num%2==1)
                                {
                                        len_2++;
                                        //System.out.println("奇数:"+num);
                                }
                        }
                }
                //3位 数的时候  奇数个数 和回文数个数
                for(int i=1;i<=7;i++)
                {
                        for(int j=0;j<=7;j++)
                        {
                                for(int a=0;a<=7;a++)
                                {
                                        num = i*100 + j*10 + a ;
                                        if(num%2==1)
                                        {
                                                len_3++;
                                                //System.out.println("奇数:"+num);
                                                if(i!=0&&i==a){
                                                        hwLens++;
                                                        System.out.println("3位数的回文数:"+num);
                                                }
                                        }
                                       
                                }
                        }
                }
                //4位 数的时候  奇数个数 和回文数个数
                for(int i=1;i<=7;i++)
                {
                        for(int j=0;j<=7;j++)
                        {
                                for(int a=0;a<=7;a++)
                                {
                                        for(int b=0;b<=7;b++)
                                        {
                                                num = i*1000 + j*100 + a*10 + b ;
                                                if(num%2==1)
                                                {
                                                        len_4++;
                                                        //System.out.println("奇数:"+num);
                                                }
                                        }
                                }
                        }
                }
                //5位 数的时候  奇数个数 和回文数个数
                for(int i=1;i<=7;i++)
                {
                        for(int j=0;j<=7;j++)
                        {
                                for(int a=0;a<=7;a++)
                                {
                                        for(int b=0;b<=7;b++)
                                        {
                                                for(int c=0;c<=7;c++)
                                                {
                                                        num = i*10000 + j*1000 + a*100 + b*10 + c ;
                                                        if(num%2==1)
                                                        {
                                                                len_5++;
                                                                //System.out.println("奇数:"+num);
                                                        }
                                                }
                                        }
                                }
                        }
                }
                //6位 数的时候  奇数个数 和回文数个数
                for(int i=1;i<=7;i++)
                {
                        for(int j=0;j<=7;j++)
                        {
                                for(int a=0;a<=7;a++)
                                {
                                        for(int b=0;b<=7;b++)
                                        {
                                                for(int c=0;c<=7;c++)
                                                {
                                                        for(int d=0;d<=7;d++)
                                                        {
                                                                num = i*100000 + j*10000 + a*1000 + b*100 + c*10 + d ;
                                                                if(num%2==1)
                                                                {
                                                                        len_6++;
                                                                        //System.out.println("奇数:"+num);
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
                //7位 数的时候  奇数个数 和回文数个数
                for(int i=1;i<=7;i++)
                {
                        for(int j=0;j<=7;j++)
                        {
                                for(int a=0;a<=7;a++)
                                {
                                        for(int b=0;b<=7;b++)
                                        {
                                                for(int c=0;c<=7;c++)
                                                {
                                                        for(int d=0;d<=7;d++)
                                                        {
                                                                for(int e=0;e<=7;e++)
                                                                {
                                                                        num = i*1000000 + j*100000 + a*10000 + b*1000 + c*100 + d*10 + e ;
                                                                        if(num%2==1)
                                                                        {
                                                                                len_7++;
                                                                                //System.out.println("奇数:"+num);
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
                jiLens = len_1 + len_2 + len_3 + len_4 + len_5 + len_6 + len_7 ;
                System.out.println("奇数个数:"+jiLens);
                System.out.println("3位数的回环数个数:"+hwLens);        
               
        }

}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 刘伟平 于 2012-10-27 16:58 编辑

累死我了,终于搞定了
  1. import java.util.*;
  2. /*
  3. 题目要求:判断并打印由0-7组成的n位和n位以下奇数的个数以及这些数中3位数中的回文数
  4. 假设 n= 5
  5. 注:回文数:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。
  6. */
  7. class OddTest {
  8.         public static void main(String[] args) {
  9.                 getOdd(5);
  10.         }
  11.         private static void getOdd(int n) {
  12.                 // 保存奇数的集合
  13.                 ArrayList<Integer> odds = new ArrayList<Integer>();
  14.                 // 保存回文数的集合
  15.                 ArrayList<Integer> palindromes = new ArrayList<Integer>();
  16.                 // 获取小于n位数的,各种位数的最大值
  17.                 int[] maxNum = new int[n];
  18.                 for (int i = 0; i < n; i++) {
  19.                         for (int j = 0; j <= i; j++) {
  20.                                 maxNum[i] += 7 * (int) Math.pow(10, j);
  21.                         }
  22.                 }

  23.                 outer: for (int i = 0; i <= maxNum[n - 1]; i++) {
  24.                         // 判断数字是否不在0 - 7 范围内
  25.                         for (int j = 0; j < n; j++) {
  26.                                 if ((i % Math.pow(10, n - j)) <= maxNum[n - j - 1]) {
  27.                                 } else
  28.                                         continue outer;
  29.                         }

  30.                         if (i % 2 == 1) {
  31.                                 odds.add(i);
  32.                                 if (i > 99 & i < 1000) {
  33.                                         // i/100:百位
  34.                                         // i%10:个位
  35.                                         if (i / 100 == i % 10) {
  36.                                                 palindromes.add(i);
  37.                                         }
  38.                                 }
  39.                         }
  40.                 }

  41.                 System.out.println("奇数列表:");
  42.                 for (int i : odds) {
  43.                         System.out.print(i + " , ");
  44.                 }

  45.                 System.out.print("\r\n回文数列表:");
  46.                 for (int i : palindromes) {
  47.                         System.out.print(i + " , ");
  48.                 }

  49.                 System.out.println();
  50.                 System.out.println("奇数个数:" + odds.size());
  51.                 System.out.println("三位回文数个数:" + palindromes.size());
  52.         }
  53. }
复制代码

结果.rar

2.47 KB, 下载次数: 227

程序的输出结果,TXT文件

评分

参与人数 1技术分 +2 收起 理由
古银平 + 2 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 官仁杰 于 2012-10-27 18:10 编辑
  1. public class test2 {
  2.         public static void main(String[] args) {
  3.                 method();
  4.                 method2();

  5.         }
  6.         public static void method(){        //判断由0-7组成的5位和5位以下奇数的个数
  7.                 int count = 0;
  8.                 for(int a = 0;a<=7;a++)
  9.                         for(int b = 0;b<=7;b++)
  10.                                 for(int c = 0;c<=7;c++)
  11.                                         for(int d = 0;d<=7;d++)
  12.                                                 for(int e = 0;e<=7;e++){
  13.                                                         if(a%2 == 1) count ++;    //判断个位数是否奇数
  14.                                                         }
  15.                 System.out.println("由0-7组成的5位和5位以下奇数的个数为" + count) ;
  16.         }
  17.         
  18.         public static void method2(){         //判断由0-7组成的3位数的回文数个数
  19.                 int count =0;
  20.                 for(int a = 1;a<=7;a+=2)
  21.                         for(int b = 0;b<=7;b++){
  22.                                 count ++;                //第三位一定和第一位数一样
  23.                         }
  24.                 System.out.println("由0-7组成的3位数的回文数个数为" + count) ;
  25.         }        
  26. }
复制代码
输出:
由0-7组成的5位和5位以下奇数的个数为16384
由0-7组成的3位数的回文数个数为32

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 张学东 于 2012-10-27 18:01 编辑

同学们都把常用的方法都写完啦,,没办法 我就只有用我自己的办法了  呵呵 希望能拿点分  。。。。嘿嘿  本来想全部用String的 但是我觉得求奇数那里还是取模的好。。
  1. package com.heima.zxd;
  2. /**
  3. * 判断并打印由0-7组成的n位和n位以下奇数的个数以及这些数中3位数中的回文数
  4.            假设 n= 5
  5. */
  6. public class huiwen {
  7.         public static void main(String[] args) {
  8.                
  9.                 int cont=0;int huiwen=0;
  10.                 int number1=0;//由0到7组成的数
  11.                 int number2=0;//奇数
  12.                
  13.                 for( int number=0;number<=99999;number++)
  14.                 {
  15.                         String strnum=String.valueOf(number);
  16.                         
  17.                         if(!(strnum.contains("8")||strnum.contains("9"))){
  18.                                 number1=number;
  19.                                 if(number1%2==1){
  20.                                         cont++;
  21.                                         number2=number1;
  22.                                         if(number2>100&&number2<999){
  23.                                         int number3=number2;
  24.                                         String num = String.valueOf(number3);  
  25.                                         String reversenum=new StringBuffer(num).reverse().toString();
  26.                                          if(reversenum.equalsIgnoreCase(num)){
  27.                                                         huiwen++;
  28.                                                         System.out.println(number3);
  29.                                                         
  30.                                                 }
  31.                                          }
  32.                                 }
  33.                         }         
  34.                 }
  35.                                 
  36.                 System.out.println("五位数的奇数是"+cont+"个");
  37.                 System.out.println("回文数的个数是"+huiwen+"个");
  38.                
  39.         }
  40. }
复制代码

无标题.png (8.54 KB, 下载次数: 53)

无标题.png

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 很给力!

查看全部评分

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