标签:
题目:
在一个贴吧里,有一个水王,经常发帖,回帖,整个贴吧,有一半以上是他的帖子,已知有一张帖子清单,含有作者ID,试编写程序,找出水王。
方法:
1.首先以第一个id开始,与下一个id比较,若相同,则与再下一个比较直至两个id不同,然后清空
2.在从现有的id中选择第一个id重复以上步骤
3.重复以上步骤,直至剩余仅有一个id,即为水王
源代码:
#include <iostream> #include <fstream> #include <string> using namespace std; char ID[1000][20];//保存从文件读到的id int i=0;//记录id总个数 void input()//从文件读取数据 { string mid_path;//文件路径 i=0;//初始化i cout<<"请输入文件路径:"<<endl; cin>>mid_path; char path[20];//将文件路径转换为字符数组形式,保存到该数组。 ifstream infile;//定义文件读入类型 //判断路径是否正确,不正确则重新输入 do { strcpy(path,mid_path.c_str());//将字符串转换为字符数组 infile.open(path);//打开指定文件 //infile.open("G:\\1.txt"); if (!infile)//判断是否已打开 { cout<<"打开文件错误,请重新输入文件路径:"<<endl; cin>>mid_path; } } while (!infile); while (!infile.eof())//读取文件,知道结束 { infile>>ID[i]; i++; } infile.close();//关闭文件 } void find()//找水王函数 { cout<<"<<"<<endl; i--;//排除最后一个空字符串 int id_first=0;//作为比较的第一个比较元素的下标 int id_second=0;//作为比较的第二个比较元素的下标 bool flag=0;//判断是否比较到最后一个ID,若比较到最后一个ID,说明比较结束,剩余的最后一个ID即为水王 for (;;) { id_second=id_first+1;//每一个元素不会与本身比较 if (strcmp(ID[id_first],"0")==0)//若元素已被清空,则寻找下一个元素 { id_first++; } else { for (;;) { if (id_second==i)//第二个比较元素为最后一个时,说明已寻到水王 { flag=1; break; } if (strcmp(ID[id_first],ID[id_second])==0||strcmp(ID[id_second],"0")==0)//若两个元素一样,或者第二个元素已清空,则第二个元素往下继续寻找 { id_second++; } else { //清空不同的元素 strcpy(ID[id_first],"0"); strcpy(ID[id_second],"0"); id_first++; break; } } } if (flag==1)//若已结束,则结束循环。 { break; } } cout<<"水王ID为:"<<endl; cout<<ID[id_first]<<endl; } int main() { input(); find(); return 0; }
测试用例:
运行结果:
标签:
原文地址:http://www.cnblogs.com/mengyinianhua/p/5509918.html