寻找“大水王”

/*设计思路:
    Id    1,2,2,3,4,2,2,3,2,2, 2, 2
    id  0 1 2 3 4 5 6 7 8 9 10 11
    可以把这个程序看成一个争抢“水王”的问题
    ①id[i](Id=1) 成为水王shuiwang=id[0],并且他的票数为sum=1,因为目前只有一个1
    ②shuiwang与id[i+1](id=2)比较
        如果相等shuiwang再得一票,sum=1+1=2
        如果不相等,shuiwang减一票,sum=1-1=0
    ③把sum与0进行比较
        如果票数sum=0则id[i](Id=1)失去竞争“水王”的权利,id[i+1](Id=2)成为“水王”,shuiwang=id[i+1]
        如果票数sum>0则id[i](Id=1)仍是“水王”
    ⑤重复②③步骤
    */
#include<iostream>
#include<fstream>
using namespace std;

void readId(int id[100],int &l){ //读取文件中的内容,并放到数组id[]中 注:l需要用&但是数组不用!!
    ifstream infile("id.txt");
    if (!infile)
    {
        cout << "读取失败!" << endl;
    }
    while (infile >> id[l])
    {
        l++;
    }
    infile.close();
}
void findShuiwang(int id[100],int &shuiwang,int &l)//寻找水王
{
    int sum = 1;
    for (int i = 1; i < l-1; i++)
    {
        if (shuiwang = id[i + 1])
        {
            sum++;
        }
        else
        {
            sum--;
        }
        if (sum == 0)
        {
            shuiwang = id[i + 1];
        }
    }
}

void main()
{
    int i,l=0,id[100];//l为数组长度
    int shuiwang;
    readId(id,l);
    if (l == 0)
    {
        cout << "文件为空!!" << endl;
    }
    else
    {
        shuiwang = id[0];
        findShuiwang(id, shuiwang, l);
        cout << "大水王是:" << shuiwang << endl;
    }
}

测试1:

测试2:文件为空

测试3:

    int i,l=0,id[100];//l为数组长度

  id[]数组的的长度应该根据实际情况来定义,目前的一张id表,id数目应该不会超过100。

测试4:本程序只是一个解决该问题的思路,所以在定义Id的时候默认为int,在此也没有考虑如果Id存在符号的情况。因为如果这是一张真实的Id表,Id就不可以存放到数组中。

  应该定义一个结构体。

posted @ 2016-05-20 17:27  言凡  阅读(323)  评论(0编辑  收藏  举报