快速找出故障机器
来源:互联网 发布:数据图表分析 编辑:程序博客网 时间:2024/05/24 03:21
《编程珠玑》1.5节:快速找出故障机器
主要是能够在一组数组中找出丢失的数。
1、在数组A中,除了一个数只出现一次外,其他数都出现两次。用异或来解,最后得到的数就是丢失的数。
#include<iostream>using namespace std;int findLost(int A[],int N){int result=0;for(int i=0;i<N;i++)result^=A[i];return result;}int main() { const int N=9;int A[N]={1,2,3,4,1,2,3,4,8};cout<<findLost(A,N)<<endl; system("pause"); return 0; }2、在数组A中,除了两个数只出现一次外,其他数都出现两次。用两次异或来解。第一次异或找出的是两个丢失的数的异或,此时根据异或结果,可以找出两个数的不同的位,比如第bit位,那么进行第二次异或时,bit位为1的值和num1进行异或,bit位为0的值和num2进行异或,最后可以得到两个数。
#include<iostream>#include<algorithm>using namespace std;pair<int,int> findLostTow(int A[],int N){int num1=0,num2=0;for(int i=0;i<N;i++)num1^=A[i];int bit=0;for(int i=0;i<32;i++){if(num1 & (1<<i)){bit=i;break;}}num1=0;for(int i=0;i<N;i++){if(A[i]&(1<<bit)==1)num1^=A[i];elsenum2^=A[i];}return pair<int,int>(num1,num2);}int main() { const int N=10;int A[N]={1,2,3,4,1,2,3,4,8,7};pair<int,int> p=findLostTow(A,N);cout<<p.first<<""<<p.second<<endl; system("pause"); return 0; }3、如果数组中丢失数之前已经知道数组和,即这些先验是已知的,那么就可以用其和,平方和,或者乘积等对丢失数据进行计算,然后列方程求解。例如求数组中丢失的两个数时,用二元二次方程求解:
#include<iostream>#include<algorithm>using namespace std;pair<int,int> findLostTow(int A[],int N,int sum,int powSum){int s=0,pows=0;for(int i=0;i<N;i++){s+=A[i];pows+=A[i]*A[i];}int num1=0,num2=0;int add=sum-s,minus=int(sqrt(double(2*powSum-2*pows-sum*sum-s*s+2*s*sum)));return pair<int,int>((add+minus)>>1,(add-minus)>>1);}int main() { const int N=10;int A[N]={1,2,3,4,1,2,3,4,8,7};pair<int,int> p=findLostTow(A,N,50,286);cout<<p.first<<""<<p.second<<endl; system("pause"); return 0; }4、如果要求的未知数增多,只需要增加方程即可,但是随着未知数个数增多,复杂度也会上升。
0 0
- 快速找出故障机器
- 快速找出故障机器
- 快速找出故障机器
- 快速找出故障机器
- 快速找出故障机器
- 快速找出机器故障
- 1.5 快速找出机器故障
- 1.5 快速找出故障的机器
- 《编程之美》-- 快速找出故障机器
- 读书笔记之编程之美 - 1.5 快速找出故障机器
- 《编程之美》阅读心得之快速找出机器故障
- 编程之美_1.5_快速找出机器故障
- 读书笔记-编程之美-1.5快速找出故障机器
- 编程之美——快速找出故障机器
- 每日一题(19) - 快速找出机器故障
- 编程之美1:快速找出故障机器
- 【编程之美】1.5 快速找出故障机器
- 编程之美(5) 快速找出故障机器
- JPA总结
- spring tx:advice事务配置
- Xcode6中怎么添加空工程模板
- Android笔记五.Intent异常处理及常用系统调用
- LeetCode——Pow(x, n)
- 快速找出故障机器
- swift 学习(1)
- 利用cx_Freeze将py文件打包成exe文件(图文全解)
- 自己训练SVM分类器进行HOG行人检测
- 【小松教你手游开发】【unity实用技能】Unity3D研究院之第一人称第三人称角色控制组件修改C#版本
- 事务的acid理解
- 最大程度地降低乘员地伤害程度
- nyoj 108 士兵杀敌系列
- Unity 3D笔记——脚本让camera转动起来