01字串--java

题目如下:

解法一:简单、讨巧了

 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 }                                                                                                                                                                      
时间: 2024-10-15 20:25:17

01字串--java的相关文章

蓝桥杯 基础练习 01字串 【暴力解决】

基础练习 01字串 时间限制:1.0s   内存限制:256.0MB 问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串. 输入格式 本试题没有输入. 输出格式 输出32行,按从小到大的顺序每行一个长度为5的01串. 样例输出 00000 00001 00010 00011 <以下部分省略> #include<stdio.h> int mai

【经典算法】寻找最长01字串(转自待字闺中)

这两天在微信公众号“待字闺中”中看到一个经典的面试算法,寻找最长01字串,原题目是这么说的: 给定一个数组,数组中只包含0和1.请找到一个最长的子序列,其中0和1的数量是相同的. 例1:10101010 结果就是其本身.例2:1101000 结果是110100 这个题目,看起来比较简单,一些同学可能认为题目的描述符合动态规划的特征,然后就开始用动态规划解,努力找状态转移方程.这些同学的感觉,是很正确的.但,找状态转移方程,我们要对原来的数组进行变换一下. 原来是0和1的串,我们将0都换为-1.这

lqb 基础练习 01字串 (itoa)

基础练习 01字串 时间限制:1.0s   内存限制:256.0MB 问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串. 输入格式 本试题没有输入. 输出格式 输出32行,按从小到大的顺序每行一个长度为5的01串. 样例输出 00000 00001 00010 00011 <以下部分省略> 分析: 可以通过itoa(int n, char *, int

蓝桥杯:基础练习 01字串【JAVA算法实现】

题目描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串. 输入格式 本试题没有输入. 输出格式 输出32行,按从小到大的顺序每行一个长度为5的01串. 样例输出 00000 00001 00010 00011 00100 <以下部分省略> public class Main { public static void main(String[] args) {

蓝桥杯基础练习 java 01字串 进制转换

问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串. 输入格式 本试题没有输入. 输出格式 输出32行,按从小到大的顺序每行一个长度为5的01串. 样例输出 00000000010001000011<以下部分省略> 我的思路:定义字符串数组从0到31,for循环int值从0到31,将int型转化为2进制,得到字符串,再判断字符串的长度,不够5位前面补0,

BASIC-2 01字串

问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是:0000000001000100001100100 请按从小到大的顺序输出这32种01串. 输入格式 本试题没有输入. 输出格式 输出32行,按从小到大的顺序每行一个长度为5的01串. 样例输出 00000000010001000011<以下部分省略> 代码 #include <stdio.h> int main () { for (int i=0;i<32;i++) printf

“蓝桥杯”基础练习:01字串

问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串. 输入格式 本试题没有输入. 输出格式 输出32行,按从小到大的顺序每行一个长度为5的01串. 样例输出 00000000010001000011<以下部分省略> 心得: 这个题目让我想起了今天刚有的用整型数组存放大数的想法 先是每次从第一个元素开始算数处理,然后调整. 对于数组中每个元素的不溢出,用w

基础练习 01字串

时间限制:1.0s   内存限制:256.0MB 问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串. 输入格式 本试题没有输入. 输出格式 输出32行,按从小到大的顺序每行一个长度为5的01串. 样例输出 00000 00001 00010 00011 #include<cstdio> #include<cstdlib> #include&

01字串

问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串. 输出格式 输出32行,按从小到大的顺序每行一个长度为5的01串. 样例输出 00000 00001 00010 00011 解题思路 方法一: 由这些数字可以看出,分别是0-31的二进制表示,所以简单的办法就是直接将0-31用一个for循环转换为二进制输出. #include <iostream> #