算法学习第一天

算法学习第一天,第1张

算法学习第一天 1,1-1000这1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?
import java.util.Random;

public class 唯一成对数{
    public static void main(String[] args) {
        int N = 5;
        int[] a=new int[N];
        for (int i = 0; i 
 2,判断一个整数是不是2的整数次方
import java.util.Scanner;

public class is2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        System.out.println(Integer.toString(n,2));
        if(((n-1)&n)==0){
            //2的整数次方的整数的二进制都只有一个1,其它位均为0.所以(n-1)&n)==0
            //4的二进制是100,减1之后为011.两者相与为0.
            System.out.println("yes");
        }else{
            System.out.println("no");
        }
    }
}
3,请实现一个函数,输入一个整数,输出该数二二进制表示中1的个数。
➢例: 9的二进制表示为1001,有2位是1。
import java.util.Scanner;

public class 二进制中1的个数 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(Integer.toString(n,2));

        int count=0;
        //法一

        while (n!=0) {
            n=(n-1)&n; 
            count++;
        }
       System.out.println(count);


        //法二
        for (int i = 0; i <32 ; i++) {
            if ((n&(1<>>i)&1)==1){
                count++;
            }
        }
        System.out.println(count);

    }
}
4,将整数的奇偶位互换
import java.util.Scanner;

public class 奇偶互换 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();


        int a = n&0xaaaaaaaa;
        //和1010 1010 1010 .....做与运算取出偶数位
        int b = n&0x55555555;
        //和0101 0101 0101 .....做与运算取出奇数位
        int c = (a>>1)^(b<<1);
        //将a右移一位,b向左一位。然后两者通过异或连接。
        System.out.println(c);

    }
}
5,给定一个介于0和1之间的实数(如0.625) ,类型为double, 打印它的二进制表示(0.101, 因为小数点后的二进制分别表示0.5,0.25.0.12.....) 如果该数字无法精确地用32位以内的二进制表示,则打印"ERROR"
import java.util.Scanner;

public class 二进制表示浮点实数 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double n =sc.nextDouble();
        StringBuilder a = new StringBuilder("0.");
        //StringBuilder类也代表可变字符串对象。

        while (n>0) {
            double b=n*2;
            if (b>=1) {
                a.append("1");
                n=b-1;
            }else {
                a.append("0");
                n=b;
            }

            if (a.length()>34) {
                System.out.println("ERROR");
                return;
            }

        }
        System.out.println(a);
        }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5697260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存