找小水王

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;
}

测试数据:
技术分享

运行结果:

技术分享

 

以上是关于找小水王的主要内容,如果未能解决你的问题,请参考以下文章

找小水王

找小水王

找小水王

找小水王

课堂作业——找“小水王”

小水王