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 <a.length-1 ; i++) {
a[i]=i+1;
//因为题目中数组里的数是从1开始的。数组下标i从0开始。所以这里是i+1.
}
a[a.length-1] = new Random().nextInt(N); //给数组最后一位赋值
// 打印数组以方便查看结果
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+" ");
}
int x=0;
for (int i = 0; i <a.length ; i++) {
x=(x^i)^a[i];
}
System.out.println(); //用于换行
System.out.println(x);
/*
自己的解法
int x=0;
int sum = 0;
for (int i = 0; i <arr.length ; i++) {
sum = sum+arr[i];
}
x=sum-1000*1001/2; //n个数的和为n(1+n)/2
System.out.println(x);
*/
}
}
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");
}
}
}
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<<i)){
count++;
}
}
System.out.println(count);
//法三
for (int i = 0; i <32 ; i++) {
if (((n>>>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);
}
}
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