黑马程序员技术交流社区

标题: 请输出满足这样条件的五位数 [打印本页]

作者: Jason996    时间: 2014-12-16 23:37
标题: 请输出满足这样条件的五位数
本帖最后由 Jason996 于 2014-12-16 23:38 编辑

/*        第三题:(优化的代码,是一位老程序员的编程思想)
        请输出满足这样条件的五位数。
                个位=万位
                十位=千位
                个位+十位+千位+万位=百位
        思路:
                1,根据以上给定条件,构造一个数。
                2,个位和万位只能用1-9的数字表示,用for循环
                2,十位和千位能用0-9的数字表示,在for循环里再嵌套一个for.
                3,注意,百位是个、十、千、万位相加,有可能大于10,而百位只能是0-9,所以必须有一个if判断。
                4,好处,这个方法只需运行90次。
*/
                int gewei, shiwei, baiwei, qianwei, wanwei;
                int num;
                int count = 0;
                int count2 = 0;
                for (gewei = 1; gewei <= 9; gewei++ )
                {
                        wanwei = gewei;
                        for (shiwei = 0; shiwei <= 9; shiwei++)
                        {
                                qianwei = shiwei;
                                baiwei = gewei + shiwei + qianwei + wanwei;

                                count++;
                                if (baiwei <= 9)
                                {
                                        num = wanwei * 10000 + qianwei * 1000 + baiwei * 100 + gewei;
                                        System.out.println(num);
                                        count2++;
                                }
                        }
                }
                System.out.println("count = "+count+"\n"+"count2 = "+count2);

        }
}


作者: as604049322    时间: 2014-12-17 06:41
楼主以后还是别发这样没有一点技术含量的贴了,一个简单的问题写的麻里麻烦

  1. class  Test
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         for(int gewan=1;gewan<=9;gewan++){
  6.             for(int shiqian=0;shiqian<=9;shiqian++){
  7.                 int bai=(shiqian+gewan)<<1;
  8.                 if(bai<=9)
  9.                     System.out.println("满足条件的数字:"+(10001*gewan+1010*shiqian+100*bai));
  10.             }
  11.         }
  12.     }
  13. }
复制代码

作者: 双鱼座程序员    时间: 2014-12-17 10:54
待分析。
作者: Jason996    时间: 2014-12-18 20:48
as604049322 发表于 2014-12-17 06:41
楼主以后还是别发这样没有一点技术含量的贴了,一个简单的问题写的麻里麻烦

...

这个代码真的很简单
作者: dwy_hm    时间: 2014-12-18 21:34
学习了
作者: dandan520    时间: 2014-12-18 21:52
菜鸟路过.
作者: lwh316658735    时间: 2014-12-18 21:56
class Day04Test3
{
        public static void main(String[] args)
        {       
                int id[]=new int[5];
                for(int i=10000;i<=99999;i++){
                        //i的临时操作变量
                        int number = i;
                        //数字下标,0=个位 依次类推
                        int idx=0;
                        //循环计算出各个位数并且装入数组中
                        while(number>0){
                                id[idx]=number%10;
                                number/=10;
                                idx++;
                        }
                        //符合条件的显示出来
                        if(id[0]==id[4] && id[1] == id[3] && (id[0]+id[1]+id[3]+id[4])==id[2] ){
                                System.out.println(i);
                        }
                       
               
                }
        }
}
楼主继续加油!
作者: qig123    时间: 2014-12-18 22:03
好多大神出没,路过
作者: kenhe    时间: 2014-12-18 22:14
这样是不是更简单?
class PrintDemo
{
        public static void main(String[] args)
        {
                int a,b,c,d,e;
                int i=10000;
                while (i<100000)
                {
                        a=i%10;
                        b=i/10%10;
                        c=i/100%10;
                        d=i/1000%10;
                        e=i/10000%10;
                        if (c==a+b+d+e)
                        {
                                System.out.println(i);
                        }
                }
        }
}
作者: jamsjun    时间: 2014-12-19 22:27
kenhe 发表于 2014-12-18 22:14
这样是不是更简单?
class PrintDemo
{

这根本不满足条件, if ( a==e && b==d && c==a+b+d+e)
这样判断我想差不多。
作者: 18334705181    时间: 2014-12-19 22:54
  1. class ClassDemo6
  2. {
  3.         public static void main(String[] args)
  4.         {        int z=0;
  5. bastard:for ( int  a=10000;a<=9999999;a++)
  6.                         {
  7.                                 if((a%10==a/10000)&(a/10%10==a/1000%10)&(a/100%10==a%10+a/10%10+a/1000%10+a/10000))
  8.                         {
  9.                                 System.out.println(a);
  10.                                 z++;
  11.                                 if (z==5)
  12.                                 {
  13.                                         break bastard;
  14.                                 }
  15.                         }
  16.                                
  17.                 }
  18.         }
  19. }
复制代码

作者: 油茶籽    时间: 2014-12-19 22:58
原来可以有那么多方法
作者: 只会金克斯    时间: 2014-12-19 23:03
强势围观。。。。。。。。。
作者: Jason996    时间: 2014-12-19 23:10
kenhe 发表于 2014-12-18 22:14
这样是不是更简单?
class PrintDemo
{

这种算法看着代码和理解简单,但是它在底层要运算99999-10000次的。我分享的这段代码只需要运算99次就能得到答案。亲,你说那个代码更好呢?
作者: Alexrl    时间: 2014-12-19 23:15
强势围观楼主被喷
作者: 魏文杰    时间: 2014-12-19 23:32
有点臃肿。。。
作者: x277402301t    时间: 2014-12-20 00:06
as604049322 发表于 2014-12-17 06:41
楼主以后还是别发这样没有一点技术含量的贴了,一个简单的问题写的麻里麻烦

...

好方法,今天学习了,换了个思路就不一样了!
作者: 找寻小龙猫    时间: 2014-12-20 00:42
好多大神,可以领走一个吗?!。。。。:loveliness:
作者: king——    时间: 2014-12-20 01:43
不是一个世界的人哈,只能默默观望着你们这些大神
作者: 红楼    时间: 2014-12-20 21:25
学习了。。。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2