找小水王
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找小水王相关的知识,希望对你有一定的参考价值。
题目:
找小水王,在一个贴吧里,有三个id发帖数都占总数的四分之一以上,试编程找出这三个小水王
方法:
1.定义三个变量分别对三个不同的id计数,并定义一个有三个元素中间数组保存这三个id,三个变量分别对应,数组的三个id
2.若三个变量有一个为0,且,当前id为在中间数组中,则将当前id保存到该变量对应的中间数组的位置
3.如果中间数组没有任一一个元素为空,且不属于该数组中的任一id,则将三个变量各减一
4.重复上述步骤,直至读取id结束
源代码:
#include<iostream> #include <fstream> #include <string> using namespace std; char ID[1000][20];//保存从文件读到的id int i;//记录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()//找水王 { i--;//排除最后一个空字符串 string king_id[3]={"0","0","0"};//临时保存某一id string mid_str;//char转换为string int id_first=0; int id_second=0; int id_third=0; for (int j=0;j<i;j++) { mid_str=ID[j]; //若是相同的id,则计数加一 if (king_id[0]==mid_str) { id_first++; } else if (king_id[1]==mid_str) { id_second++; } else if (king_id[2]==mid_str) { id_third++; } //若king_id数组某一位为空,则将当前id保存到空king_id数组该位中 else if (id_first==0) { king_id[0]=mid_str; id_first++; } else if (id_second==0) { king_id[1]=mid_str; id_second++; } else if (id_third==0) { king_id[2]=mid_str; id_third++; } //若当前king_id数组不为空,则计数减一,相当于消除四个完全不同的id else { id_first--; id_second--; id_third--; } } cout<<"三个小水王ID为:"<<endl; cout<<king_id[0]<<endl<<king_id[1]<<endl<<king_id[2]<<endl; } int main() { input(); find(); return 0; }
测试数据:
运行结果:
以上是关于找小水王的主要内容,如果未能解决你的问题,请参考以下文章