黑马程序员技术交流社区

标题: 一个小练习! [打印本页]

作者: 黄方    时间: 2012-2-26 19:37
标题: 一个小练习!
用*代表1、3、5、7、9中的一位奇数,打印出所有满足“**×**=***”的所有组合,输出
* 时要求用“×”代表乘号。
样例:13 × 15 = 175

作者: 沈样    时间: 2012-2-26 22:16
public static void PrintOdd(){
                for(int x = 11;x<=99;)
                {
                        for(int y = 11;y<=99;)
                        {
                                int sum = x*y;
                                if(sum%2==1&&sum<999&&100<sum)
                                {
                                        System.out.println(x+"x"+y+"="+sum);
                                }
                                y+=2;
                        }
                        x+=2;
                }
        }
作者: 沈样    时间: 2012-2-26 22:27
发现上面的有重量的,下面这个程序改进了不一下,如有错误请指出:
public static void sing(){
                for(int x = 11;x<=99;)
                {
                        for(int y = 99;y>=x;)
                        {
                                int sum = x*y;
                                if(sum%2==1&&sum<999&&100<sum)
                                {
                                        System.out.println(x+"x"+y+"="+sum);
                                }
                                y-=2;
                        }
                        x+=2;
                }
        }
作者: 黄方    时间: 2012-2-26 22:37
本帖最后由 舞动的心弦 于 2012-2-26 22:49 编辑

{:soso_e100:}
作者: 黄方    时间: 2012-2-26 22:42
本帖最后由 舞动的心弦 于 2012-2-26 22:50 编辑

{:soso_e163:}
作者: 佟都    时间: 2012-2-26 23:16
本帖最后由 tongdu_simon 于 2012-2-27 00:02 编辑

/**
        思路:
                1.构造出符合条件的数字,并存放于数组中;
                2.用上一步求出的数字进行乘法运算,并输出
*/

  1. class aExercise{

  2.         public static void printTable(){
  3.                 int [] odd  = {1,3,5,7,9};
  4.                 int [] odds = new int[5*5];
  5.                 int len     = odd.length;
  6.                 int lens    = odds.length;
  7.                 int tmp     = 0;

  8.                 //将所有的数字组合存在odds数组中
  9.                 for(int i=0; i<len; i++) {
  10.                         int x=odd[i];                        //x-代表十位,y-代表个位
  11.                         for(int j=0; j<len; j++) {
  12.                                 int y = odd[j];
  13.                                 odds[tmp++] = x*10+y;
  14.                         }
  15.                 }

  16.                 //计算结果并输出
  17.                 for(int i=0; i<lens; i++) {
  18.                         int m = odds[i];
  19.                         for(int j=0; j<lens; j++) {
  20.                                 int n = odds[j];
  21.                                 System.out.print(m +"x"+ n +"="+ m*n +"\t");
  22.                         }
  23.                         System.out.println();
  24.                 }
  25.         }

  26.         public static void main(String [] args){
  27.                 printTable();
  28.         }

  29. }
复制代码

作者: 黄方    时间: 2012-2-27 11:29
沈样 发表于 2012-2-26 22:27
发现上面的有重量的,下面这个程序改进了不一下,如有错误请指出:
public static void sing(){
                for(int x = ...

你这个不行额!两位数乘以两位数中的两位数必须是1 3 5 7 9组成的!如果是你这样做的话,你遍历取到的是所有的小于100的奇数啦!!
作者: 黄方    时间: 2012-2-27 11:30
沈样 发表于 2012-2-26 22:16
public static void PrintOdd(){
                for(int x = 11;x

你在看看题意吧,好样你没怎么弄清题目的意思哈!!
作者: tanlei200620    时间: 2012-2-27 11:52
经试验,发现不是  很符合,所以 在 各位的基础上进行了 改进,如下:
class Hello{


           public static void printTable(){
           int [] odd  = {1,3,5,7,9};
           int [] odds = new int[5*5];
           int len     = odd.length;
           int lens    = odds.length;
           int tmp     = 0;

           //将所有的数字组合存在odds数组中
           for(int i=0; i<len; i++) {
                   int x=odd[i];                        //x-代表十位,y-代表个位
                   for(int j=0; j<len; j++) {
                           int y = odd[j];
                           odds[tmp++] = x*10+y;
                   }
           }

           //计算结果并输出
           for(int i=0; i<lens; i++) {
                   int m = odds[i];
                   for(int j=0; j<lens; j++) {
                           int n = odds[j];
                           int sum = m*n;
                           if(100<sum&&sum<=999&&sum/100%2==1&&sum/10%2==1&&sum%2==1)
                           System.out.print(m +"x"+ n +"="+ sum +"\t");
                   }
                   System.out.println();
           }
   }

        public static void main(String[] args) {
                printTable();
        }

}
作者: tanlei200620    时间: 2012-2-27 11:53
运行结果:
13x15=195        13x55=715        13x75=975       
15x13=195        15x37=555        15x53=795       
17x35=595        17x55=935       



35x17=595       
37x15=555       


53x15=795       
55x13=715        55x17=935       




75x13=975
作者: 黄方    时间: 2012-2-27 12:29
tongdu_simon 发表于 2012-2-26 23:16
/**
        思路:
                1.构造出符合条件的数字,并存放于数组中;

正解,但是少了个判断条件,我也写了一个,和你的思路差不多!分享一下!
  1. public void Method(){
  2.        
  3.                 int A[]={1,3,5,7,9};
  4.                 int Array[]=new int[A.length*A.length];
  5.                 int temp=0;
  6.                         for(int i=0;i<A.length;i++){       
  7.                                 for(int n=0;n<A.length;n++){
  8.                                         int m=A[i];                        //m代表的数指在数组中取出的位
  9.                                        
  10.                                         int x=A[n];               //x代表的数指在数组中取出的位

  11.                                          Array[temp++]=m*10+x;  //组合成两位数
  12.                
  13.                                         }
  14.                                 }
  15.                        
  16.                         for(int n=0;n<Array.length;n++){
  17.                                
  18.                                 for(int c=0;c<Array.length;c++){
  19.                                        
  20.                                         int j=Array[n];//在新的数组中开始遍历取出新的两位数
  21.                                         int y=Array[c];
  22.                                        
  23.                                         if(j*y<1000){
  24.                                         System.out.print(j+"*"+y+"="+j*y+" ");
  25.                                        
  26.                                         }
  27.                                 }
  28.                                 System.out.println();         
  29.                                
  30.                         }
  31.                        
  32.        
复制代码

作者: 黄方    时间: 2012-2-27 12:42
tanlei200620 发表于 2012-2-27 11:52
经试验,发现不是  很符合,所以 在 各位的基础上进行了 改进,如下:
class Hello{

额,呵呵,我看了一下,其实你的代码中的那个判断条件  if(100<sum&&sum<=999&&sum/100%2==1&&sum/10%2==1&&sum%2==1)不对哦,你想我们取出的数字要组成两位数,只需要把取出的数字*10+取出的数字,所以判断条件应该是组成两位数*组成两位数<1000就可以了!我的代码!分享一下!
  1. public class Demo_3 {

  2.        
  3.         public static void main(String[] args) {
  4.                  Demo_3 d=new Demo_3();
  5.                  d.printTable();

  6.                         }
  7. public void Method(){
  8.        
  9.                 int A[]={1,3,5,7,9};
  10.                 int Array[]=new int[A.length*A.length];//能够组成的两位数个数
  11.                 int temp=0;
  12.                         for(int i=0;i<A.length;i++){       
  13.                                 for(int n=0;n<A.length;n++){
  14.                                         int m=A[i];                        //m代表的数指在数组中取出的位
  15.                                        
  16.                                         int x=A[n];               //x代表的数指在数组中取出的位

  17.                                          Array[temp++]=m*10+x;  //组合成两位数
  18.                
  19.                                         }
  20.                                 }
  21.                        
  22.                         for(int n=0;n<Array.length;n++){
  23.                                
  24.                                 for(int c=0;c<Array.length;c++){
  25.                                        
  26.                                         int j=Array[n];//在新的数组中开始遍历取出新的两位数
  27.                                         int y=Array[c];
  28.                                        
  29.                                         if(j*y<1000){
  30.                                         System.out.print(j+"*"+y+"="+j*y+" ");
  31.                                        
  32.                                         }
  33.                                 }
  34.                                 System.out.println();         
  35.                                
  36.                         }
  37.                        


  38.                         }
复制代码

作者: 黄方    时间: 2012-2-27 12:44
运行结果:
11*11=121 11*13=143 11*15=165 11*17=187 11*19=209 11*31=341 11*33=363 11*35=385 11*37=407 11*39=429 11*51=561 11*53=583 11*55=605 11*57=627 11*59=649 11*71=781 11*73=803 11*75=825 11*77=847 11*79=869
13*11=143 13*13=169 13*15=195 13*17=221 13*19=247 13*31=403 13*33=429 13*35=455 13*37=481 13*39=507 13*51=663 13*53=689 13*55=715 13*57=741 13*59=767 13*71=923 13*73=949 13*75=975
15*11=165 15*13=195 15*15=225 15*17=255 15*19=285 15*31=465 15*33=495 15*35=525 15*37=555 15*39=585 15*51=765 15*53=795 15*55=825 15*57=855 15*59=885
17*11=187 17*13=221 17*15=255 17*17=289 17*19=323 17*31=527 17*33=561 17*35=595 17*37=629 17*39=663 17*51=867 17*53=901 17*55=935 17*57=969
19*11=209 19*13=247 19*15=285 19*17=323 19*19=361 19*31=589 19*33=627 19*35=665 19*37=703 19*39=741 19*51=969
31*11=341 31*13=403 31*15=465 31*17=527 31*19=589 31*31=961
33*11=363 33*13=429 33*15=495 33*17=561 33*19=627
35*11=385 35*13=455 35*15=525 35*17=595 35*19=665
37*11=407 37*13=481 37*15=555 37*17=629 37*19=703
39*11=429 39*13=507 39*15=585 39*17=663 39*19=741
51*11=561 51*13=663 51*15=765 51*17=867 51*19=969
53*11=583 53*13=689 53*15=795 53*17=901
55*11=605 55*13=715 55*15=825 55*17=935
57*11=627 57*13=741 57*15=855 57*17=969
59*11=649 59*13=767 59*15=885
71*11=781 71*13=923
73*11=803 73*13=949
75*11=825 75*13=975
77*11=847
79*11=869


作者: tanlei200620    时间: 2012-2-27 12:57
你的结果   869  847 等  就有  4,不符合
作者: 佟都    时间: 2012-2-27 15:39
舞动的心弦 发表于 2012-2-27 12:29
正解,但是少了个判断条件,我也写了一个,和你的思路差不多!分享一下! ...

(^-^)!
审题给漏掉了
作者: 张建银    时间: 2012-2-27 18:18
我想你们的运行结果有重复的,不知道你们发现没,下面是我给出的正解
public class UserText
{
        public static void main(String[] args)
        {  
                Map<String,String> map=new HashMap<String,String>();
                Integer sum=0;
              for(int x=11;x<100;x=x+2){
               if(x/10%2==1){
                        for(int y=11;y<100;y=y+2){
                          if(y/10%2==1){
                                 sum=x*y;
                                if(sum<1000){
                                        int a=sum/100;
                                        int b=(sum%100)/10;
                                        int c=sum-a*100-b*10;
                    if(a%2==1&&b%2==1&&c%2==1){               
                            map.put(sum.toString(),x+"x"+y+"="+sum);                
                                }
                          }
                        }
                   }                       
                  }
          }
              for(String str:map.keySet()){                     
                      System.out.println(map.get(str));
              }
        }
}

作者: 沈样    时间: 2012-2-28 07:32
舞动的心弦 发表于 2012-2-27 11:29
你这个不行额!两位数乘以两位数中的两位数必须是1 3 5 7 9组成的!如果是你这样做的话,你遍历取到的是 ...

看来是我审题不对,如果是这样就更简单了直接定个数组两层循环




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