ttpn

导航

 

题目如下:

   

解法一:简单、讨巧了

 1 class test 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         int a,b,c,d,e;
 6 
 7         for(a=0;a<=1;a++)
 8           for(b=0;b<=1;b++)
 9             for(c=0;c<=1;c++)
10               for(d=0;d<=1;d++)
11                 for(e=0;e<=1;e++)
12                   System.out.printf("%d%d%d%d%d\n",a,b,c,d,e);
13     }
14 }

解法二:
二进制数1-5位的权值分别为:1、2、4、8、16,如果对应的十进制数位X,则
X=a*1+b*2+c*4+d*8+e*16,其中,a、b、c、d、e要么是0要么是1。
观察表达式可以知道,(int)(X/16)即为高位的二进制位,(X%16)再除以相应的权即可得到次高位的二进制位、、、
 1 class test
 2 {
 3     public static void main(String [] args)
 4     {
 5         int[] Arr={1,2,4,8,16};//权值
 6         int[] Res=new int[5];
 7         int num,Tem,Sh;
 8         int j,k,i;
 9         
10         for(k=0;k<5;k++)  //清零
11            Res[k]=0;
12         for(j=0;j<32;j++)
13         {   
14             num=j;
15             for(i=4;i>=0;i--)
16             {
17                 Tem=Arr[i];          //取权值待用
18                 Sh=(int)(num/Tem);  //num<32,Sh要么是0要么是1
19                 Res[i]=Sh;
20                 num=num-Tem*Sh;     
21             }
22 
23             for(k=4;k>=0;k--)     //打印数组
24               System.out.print(Res[k]);
25             System.out.println();
26         }
27     }
28 }

  

解法三:

类似解法二,(X%2)即为最低位的二进制位,(int)(X/2))再除以2可得次低位的二进制位、、、

 1 class test 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         int[] res=new int[5];
 6         int i,j,h;
 7         int temp;
 8 
 9         for(i=0;i<5;i++)
10             res[i]=0;
11         for(i=0,j=0;j<32;j++,i=0)
12         {
13            res[i]=j;          //先把需要打印的二进制数赋给最低位
14            while(res[i]>=2)  //当前位大于2,需要调整
15            {
16               temp=res[i]/2;     //余数即为最低位,而商
17               res[i]=res[i]%2;  //再赋给高一位
18               res[++i]=temp;
19            }
20 
21            for(h=4;h>=0;h--)  //打印数组
22              System.out.printf("%d",res[h]);
23            System.out.printf("\n");
24         }
25         
26     }
27 }

 

解法四:

思维类似十进制一样,从00000开始,然后逐渐从低位加1,某一位满2,则需要相应的调整。但调整时,总是从最低位开始,即只有当最低位满2时,其他位才可能需要调整。

 1 class test {
 3     public static void main(String[] args) 
 4     {
 5         int i,j;
 6         int[]arr=new int[5];
 7 
 8         for(i=0;i<5;i++)
 9             arr[i]=0;
10         System.out.printf("00000\n");  //先输出00000的情况
11 
12         for(i=0,j=1;j<32;j++,i=0)
13         {
14            arr[i]=arr[i]+1;    //个位数加1
15            while(arr[i]==2)   //满2,当前位清零,并向高位进位,循环判断其它高位
16            {
17               arr[i++]=0;    
18               arr[i]++;
19            }
20 
21            for(i=4;i>=0;i--)
22                System.out.printf("%d",arr[i]);
23            System.out.printf("\n");
24 
25         }
26     }
27 }                                                                                                                                                                      
posted on 2017-02-12 16:52  Buzhou  阅读(252)  评论(0编辑  收藏  举报