码迷,mamicode.com
首页 > 其他好文 > 详细

“找水王”编程实现。

时间:2016-05-19 21:08:59      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

题目:

在一个贴吧里,有一个水王,经常发帖,回帖,整个贴吧,有一半以上是他的帖子,已知有一张帖子清单,含有作者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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!