``题解:用异或可消除 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);
}
}