public class FindOdd {
public static void main(String args[]){
for(int i=0;i<10000;i++){
if(!test()){
System.out.println("Error Occurs: "+i);
break;
}
}
System.out.println("Well Job! All Pass.");
}
public static boolean test(){
int num = (int)(Math.random()*102400)*2;
int multi = 500;
int[] test = new int[num+3];
for(int i=0; i<num;i+=2){
test[i] = (int)(Math.random()*num*multi);
test[i+1] = test[i];
}
test[num] = (int)(Math.random()*num*multi);
test[num+1] = (int)(Math.random()*num*multi);
while(test[num+1]==test[num])
test[num+1] = (int)(Math.random()*num*multi);
test[num+2] = (int)(Math.random()*num*multi);
while(test[num+2]==test[num]||test[num+2]==test[num+1])
test[num+2] = (int)(Math.random()*num*multi);
System.out.println("test["+num+"]: " + test[num]);
System.out.println("test["+(num + 1)+"]: " + test[num+1]);
System.out.println("test["+(num + 2)+"]: " + test[num+2]);
int[] result= findThree(test);
System.out.println("result[0]: " + result[0]);
System.out.println("result[1]: " + result[1]);
System.out.println("result[2]: " + result[2]);
return (result[0]==test[num]&&result[1]==test[num+1]&&result[2]==test[num+2])
||(result[0]==test[num]&&result[2]==test[num+1]&&result[1]==test[num+2])
||(result[1]==test[num]&&result[0]==test[num+1]&&result[2]==test[num+2])
||(result[1]==test[num]&&result[2]==test[num+1]&&result[0]==test[num+2])
||(result[2]==test[num]&&result[0]==test[num+1]&&result[1]==test[num+2])
||(result[2]==test[num]&&result[1]==test[num+1]&&result[0]==test[num+2]);
}
public static int[] findThree(int[] list){
int[] result = new int[3];
int nums1=0,nums2=0,result1=0,result2=0;
int exploc = 1;
int temp;
while(true){
nums1=0;
nums2=0;
result1=0;
result2=0;
for(int i=0;i<list.length;i++){
if((list[i]&exploc)==exploc){
//the k-th bit is 1
nums1++;
result1^=list[i];
} else{
//the k-th bit is 0
nums2++;
result2^=list[i];
}
}
if((nums1&1)==1){
temp = nums2;
nums2 = nums1;
nums1 = temp;
temp = result2;
result2 = result1;
result1 = temp;
}
//nums1 are even
if(result1==0){
//these three number are in zeros
}else{
//there are only one in zeros, so
result[0] = result2;
int j=0;
int exp = 1;
while(true){
if((result1&exp)==exp)
break;
j++;
exp<<=1;
}
result1 = 0;
result2 = 0;
for(int i=0;i<list.length;i++){
if((list[i]&exp)==exp){
//the oneloc-th bit is 1
result1^=list[i];
} else{
//the oneloc-th bit is 0
result2^=list[i];
}
}
if((result[0]&exp)==exp){
result[1] = result1^result[0];
result[2] = result2;
}else{
result[1] = result1;
result[2] = result2^result[0];
}
break;
}
exploc<<=1;
}
return result;
}
}
分享到:
相关推荐
文章目录在其他数都出现偶数次的数组中找到出现奇数次的数整型数组中其他数都出现偶数次找到唯一出现奇数次的数题目算法思路相应代码整型数组中其他数都出现偶数次找到两个出现奇数次的数题目算法思路相应代码 ...
# 给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性。如果为奇数输出1,偶数则输出0。 # 输入示例 # 输入:L=[2,8,3,50] # 输出示例 # 输出:0 # 解析 # 在上题的基础上的改造题, 这里直接...
给出n个数据先将前从大到小排序再将这排完的n个数的偶数,奇数分别相加,再将和相减即得结果
编程求所有的n位数中,有几个数有偶数个数字是3, (输入格式):输入n (输出格式):输出方案对12345取模的值
#参数k表示从多少开始,如k=0表示输出n以内的偶数,k=1表示输出n以内的奇数 def generateList(k,n): L=[] while(k<n): L.append(k) k=k+2 print (L) generateList(0,100) #[0, 2, 4, 6, 8, 10...98] ...
printf("题目:输入一个数判断是否是5与7的倍数同时判断这个倍数是偶数倍还是奇数倍"); printf("请输入一个数值:"); scanf("%d",&a); if(a%5==0 && a%7==0 )//判断是否是5与7的倍数 是 {...
以下实例用于判断一个数字是否为奇数或偶数: # -*- coding: UTF-8 -*- # Filename : test.py # Python 判断奇数偶数 # 如果是偶数除于 2 余数为 0 # 如果余数为 1 则为奇数 num = int(input("输入一个数字: ")) if...
易语言-判断奇数偶数例子
简单java程序键盘录入数判断偶数和奇数.提示用户输入5个100-200(包含100和200)之间的数字判断是不是偶数如果是就将其存放在一个集合当中
java代码-数组中两种数出现奇数次,其他数出现偶数次,找到这两个数
python编写程序,生成10个随机整数,其中的奇数相加,偶数相加,结果进行输出两个和。
strassen算法-现实2次幂,偶数奇数 C语言实验
C语言训练程序_统计字符串中ASII值为偶数奇数的个数
100以内的偶数和奇数之和
ACL奇数偶数匹配.doc
用于判断奇数、偶数,仅供学习交流,用C++编写的。
将一个整数线性表拆分成奇数和偶数线性表,课后习题,完整好用
word文档,里面是一次编译原理作业,为偶数个a和偶数个b构成的a、b串的集合L的正则表达式、右线性表达、及DFA