蓝桥算法题一.

``在这里插入图片描述题解:用异或可消除 a^0=0
b^

import java.util.Random;

public class DAN {
    public static void main(String[] args) {
        int N = 11;
        int[] a = new int[N];
        for (int i = 0; i < a.length - 1; i++) {
            a[i] = i + 1;
        }
        //最后一个数是随机数
        a[a.length - 1] = new Random().nextInt(N - 1) + 1;
        //随机下标
        int index = new Random().nextInt(N);
        swap(a, index, a.length - 1);
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }

        int x1 = 0;
        for (int i = 0; i < N; i++) {
            x1 = (x1 ^ i);
        }
        for (int i = 0; i < N; i++) {
            x1 = x1 ^ a[i];
        }
        System.out.println("\n");
        System.out.println(x1);
        System.out.println("======================");
        int[] helper = new int[N];
        for (int i = 0; i < N; i++) {
            helper[a[i]]++;
        }
        for (int i = 0; i < N; i++) {
            if (helper[i] == 2) {
                System.out.println(i);
                break;
            }
        }
    }

    private static void swap(int[] a, int index, int i) {
        int temp=a[index];
        a[i]=a[index];
        a[i]=temp;



    }
}

在这里插入图片描述

import java.util.Arrays;
public class DAN {
    public static void main(String[] args) {
        int n = 11;
        int[] a = new int[n];
        for (int i = 0; i < a.length-1; i+=2) {
            a[i] = i;
            a[i+1] = i;
        }
        a[a.length - 1] = n;
        System.out.println(Arrays.toString(a));
        int x1 = 0;
        for (int i = 0; i < a.length; i++) {
            x1 = x1 ^ a[i];
        }
        System.out.println(x1);
    }
}

在这里插入图片描述

public class DAN {
    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;
        //对比每一位
        for(int i=0;i<32;i++) {
            if ((N&(1<<i)) == (1 << i)) {
                count++;
            }
        }
            System.out.println(count);
            System.out.println("===================");
         //第二种方法
         count=0;
        for(int i=0;i<32;i++){
            if(((N>>>i)&1)==1){
                count++;
            }
            System.out.println(count);
        }
             System.out.println("-------------");
        //第三种:
        count=0;
        while(N!=0){
            N=((N-1)&N);//消除最低位上的1
            count++;
        }
        System.out.println(count);
        }
    }

第三种方法非常好用

在这里插入图片描述

public class DAN {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        System.out.println(Is2(N));
        }
    public static boolean Is2(int a){
        if(((a-1)&a)==0) {
            return true;
        }
        else
            return false;
    }

    }

在这里插入图片描述

public class DAN {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        System.out.println(Is2(N));
       System.out.println(m(a));

    }
    private static int m(int i){
        int ou=i&0xaaaaaaaa;
        int qi=i&0x55555555;
        return (ou>>1)^(qi<<1);
        }
        }

在这里插入图片描述

 public class DAN {
        public static void main(String[] args){
            double n=0.625;
            StringBuilder sb=new StringBuilder("0.");
            while(n>0){
                //乘2 取整
                double r=2*n;
                //判断整数部分
                if(r>=1) {
                    sb.append("1");//消除整数部分
                    n = r - 1;
                }else{
                    sb.append("0");
                    n=r;

                    }
                if(sb.length()>32){
                    System.out.println("error");
                    return;
                }


                }
            System.out.println(sb.toString());
            }

        }

在这里插入图片描述

在这里插入图片描述

用哈希表很快:
public int foundOnceNumber (int[] arr, int k) {
        // write code here
        HashMap<Integer,Boolean> map = new HashMap<>();

        for(int i = 0;i < arr.length;i++) {
            if(map.containsKey(arr[i])) {
                map.put(arr[i],false);
            }else {
                map.put(arr[i],true);
            }
        }

        Set<Integer> set = map.keySet();

        for(int t : set) {
            if(map.get(t)) {
                return t;
            }
        }

        return -1;
    }
}

法2:

public class DAN{

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int [] arr= {2,2,2,9,7,7,7,3,3,3,6,6,6,0,0,0};
        int len=arr.length;//len:16
        char[][] kRadix=new char[len][];   //kRadix:char[16][]
        int k=3;

        int maxlen=0;
        //转成k进制字符数组
        //对于每个数字
        for(int i=0;i<len;i++) {
            kRadix [i]=new StringBuilder(Integer.toString(arr[i],k)).reverse().toString().toCharArray();
            if(kRadix[i].length>maxlen) {
                maxlen=kRadix[i].length;
            }
        }

        int[] resArr =new int[maxlen];
        for(int i=0;i<len;i++) {
            //不进制加法
            for(int j=0;j<maxlen;j++) {
                if(j>=kRadix[i].length)
                    resArr[j]+=0;
                else
                    resArr[j]+=(kRadix[i][j]-'0');
            }
        }

        int res=0;
        for(int i=0;i<maxlen;i++) {
            res += (resArr[i]%k)*(int)(Math.pow(k, i));
        }
        System.out.println(res);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依然范特嘻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值