标签:scan cout for 算法思想 edit online \n memory 网上
xiaod现在正在某个球场负责网球的管理工作。为了方便管理,他把每个球都编了号,且每个编号的球的总个数都是偶数。有一天,xiaod发现少了一个球,你能帮他找出丢的那个球的球号吗?
5 1 1 3 6 6 3 1 2 1
3 2
1 #include<stdio.h> 2 #include<stdlib.h> 3 int a[1000005]; 4 int f(const void *a,const void *b) 5 { 6 return *(int*)a-*(int*)b; 7 } 8 int main() 9 { 10 int n,i,t,ans,k; 11 while(scanf("%d",&n)!=EOF) 12 { 13 for(i=0; i<n; i++) 14 scanf("%d",&a[i]); 15 qsort(a,n,sizeof(int),f); 16 ans = 1; 17 k = 1; 18 for(i=0; i<n-1; i++) 19 { 20 if(a[i] == a[i+1]) 21 ans++; 22 else 23 { 24 if(ans%2 == 1) 25 { 26 printf("%d\n",a[i]); 27 k = 0; 28 break; 29 } 30 ans = 1; 31 } 32 } 33 if(k) 34 printf("%d\n",a[n-1]); 35 } 36 return 0; 37 }
后来网上看了别人的,利用异或来做(大佬),思想是因为丢失的那个球号必定是奇数,所以对所有球号进行排查,必定找出。那什么是异或呢?比如:5和6异或,5的二进制101,6的二进制110等于011也就是3,两个相同的数异或时为0。具体看代码实现:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int n; 6 while(cin>>n) 7 { 8 int a,b = 0; 9 while(n--) 10 { 11 cin>>a; 12 b^=a; 13 } 14 cout<<b<<endl; 15 } 16 return 0; 17 }
标签:scan cout for 算法思想 edit online \n memory 网上
原文地址:https://www.cnblogs.com/-skyblue/p/9490608.html