将一个数字奇偶位互换

题目描述:将一个数字的二进制形式奇偶位互换,例如二进制1001,互换之后就变成了
0110

思路:
首先将其奇数位保存下来
将其与101010.....这种二进制相与,则奇数位就保存了下来
在将其偶数位保存下来
将其与010101.....这二进制相与,则其偶数位保存了下来
然后将其偶数位左移一位,奇数位右移一位,然后将其异或,则得到的就是互换之后的
数字

代码示例:
import java.util.Scanner;

/*给出一个数字,将其奇偶位交换*/
public class Change_Number {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int number = in.nextInt();

        Integer sum = Change_number(number);

        System.out.println(sum);
    }

    private static Integer Change_number(int number) {

        Integer ji = number&0xaaaaaaaa;

        Integer ou = number&0x55555555;

        return (ou<<1)^(ji>>1);

    }
}

这个问题可以使用排列组合的方法进行计算。首先,我们需要确定这个8数中哪些数字是可以使用的,因为题目规定了只能使用0-7这8个数字,并且不能有重复数字,所以这个数字可以使用的数字就是{0,1,2,3,4,5,6,7}中取出8个数字的排列数,即8的全排列,即8! = 40320。 接下来,我们需要确定满足条件的8数中有哪些数字可以放在第一,因为对于一个8数,它能否被11整除取决于它的偶数数字之和与奇数数字之和的差是否为11的倍数。因此,我们可以将这个8数按照奇偶分为两部分,分别计算它们的数字之和,然后计算它们之差是否为11的倍数。由于这个8数中没有重复数字,所以它的偶数数字之和与奇数数字之和的差的绝对值为8,因此我们只需要确定奇数数字之和与偶数数字之和的差是11的倍数还是11的倍数加上11即可。 对于奇数数字之和与偶数数字之和的差是11的倍数的情况,我们可以将数字1和数字6放在奇数,将数字0、2、3、4、5、7放在偶数,然后计算它们的排列数,即6! / 2! = 360。因为数字1和数字6可以互换置,所以需要除以2。 对于奇数数字之和与偶数数字之和的差是11的倍数加上11的情况,我们可以将数字3和数字7放在奇数,将数字0、1、2、4、5、6放在偶数,然后计算它们的排列数,即6! / 2! = 360。因为数字3和数字7可以互换置,所以需要除以2。 因此,满足条件的8数的总数为360 + 360 = 720。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值