//寻找水王 2016/5/16 Zhangpy #include <iostream> #include <fstream> #include <cstring> using namespace std; int camp(int arr[],int N) { int i=0,j=0; for(;i<N-1;) { if(arr[i]==arr[i+1]) //抵消形成新数组 { arr[j]=arr[i]; j++; } i=i+2; if(i+1==N) //奇数 { arr[j]=arr[i+1]; j++; } } cout<<j; //新数组数目 if(j==0) return arr[0]; else if((N/2)*2!=N) camp(arr,j+1); else camp(arr,j); } int find() { ifstream in; int Data_read[10]={-99999}; int max[10]={-9999},NUM,N=10; in.open("Zhangpy.txt"); if(!in) //打开错误,报错 { cerr<<"open error!"<<endl; exit(0); } for (int i=0; i<N; i++) { in>>Data_read[i]; cout<<Data_read[i]; } cout<<endl; in.close(); /************************************************************************************************** 移位嵌套 for(;N>1;) { for(int i=0;i<N-1;) { if(Data_read[i]==Data_read[i+1]) { for(int j=i+1;j<N;j++) Data_read[j]=Data_read[j+1]; i=i+1; } else { for(int j=i;j<N;j++) Data_read[j]=Data_read[j+1]; i=i+2; } NUM=Data_read[0]; } N=N/2; } *******************************************************************************************/ NUM=camp(Data_read,N); return NUM; } int main() { int max; max=find(); if(max==-9999) cout<<"error!"<<endl; else cout<<"King_ID is "<<max<<endl; return 0; }
思路:
camp()函数使用递归的方法,现两两想消,由于水王发帖数目超过总数一半,所以两两想消一定可以留下水王,使用递归可以滤出伪水王
find()函数主要是读取文件内id并调用camp()函数返回king_id