Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 2006百度之星程序设计大赛:蝈蝈计分 参考解答(正确性未知)
【标  题】:2006百度之星程序设计大赛:蝈蝈计分 参考解答(正确性未知)
【关键字】:2006
【来  源】:http://blog.csdn.net/Veiz/archive/2006/05/31/764837.aspx

2006百度之星程序设计大赛:蝈蝈计分 参考解答(正确性未知)

Your Ad Here

#include <string>
#include <vector>
#include <fstream>
#include <queue>
#include <iostream>
#include <stdio.h>
#include "math.h"

using namespace std;

struct score
{
    char left;
    char right;
};

vector< vector<char> > record;
queue< vector<char> > testRecord;
vector< vector<char> > finalTestRecord;

bool ReachScore(const char& left, const char& right)
{
    if(left >= 21)
    {
        if(right <= 19)
        {
            return true;
        }
    }
    if(right >= 21)
    {
        if(left <= 19)
        {
            return true;
        }
    }

    if((left >= 22) && (right == left -2))
    {
        return true;
    }
    if((right >= 22) && (left == right - 2))
    {
        return true;
    }

    return false;
}

vector<score> GetScore(vector<char> vec)
{
    char left = 0;
    char right = 0;
    vector<score> scoreVec;
    score mk;
    for(size_t i = 0; i < vec.size(); ++i)
    {
        if(i % 2 == 0)
        {
            left += vec.at(i);
        }
        else
        {
            right += vec.at(i);
        }
        if(ReachScore(left, right) == true)
        {
            mk.left = left;
            mk.right = right;
            scoreVec.push_back(mk);
            left = 0;
            right = 0;
        }
        else if (i == vec.size() - 1)
        {
            scoreVec.clear();
            return scoreVec;
        }

    }
    int nLeftScore = 0;
    int nRightScore = 0;
    for(vector<score>::iterator iter = scoreVec.begin();
        iter != scoreVec.end();
        ++iter)
    {
        if((*iter).left > (*iter).right)
        {
            ++nLeftScore;
        }
        else
        {
            ++nRightScore;
        }
    }
    if((nLeftScore == 3 && nRightScore < 3) ||
        (nRightScore == 3 && nLeftScore < 3))
    {
        return scoreVec;
    }
    else
    {
        scoreVec.clear();
        return scoreVec;
    }
}

void GetScore()
{
    vector<score> temp;
    vector<char> chvec;

    for(size_t i = 0; i < testRecord.size(); ++i)
    {
        chvec = testRecord.front();
        testRecord.pop();
        temp = GetScore(chvec);
        if(temp.size() == 0)
        {
            cout << "\nUNKNOWN\n\n";
            return;
        }
        else
        {
            for(vector<score>::iterator iter = temp.begin(); iter != temp.end(); ++iter)
            {
                cout << (int)(*iter).left << ":" << (int)(*iter).right << endl;
            }
            return;
        }
    }
}

int main(int argc, char* argv[])
{
    ifstream is(argv[1], ios::in | ios::binary);
    int nMatch = 0;
    is >> nMatch;
    for(int nMatchIndex = 0; nMatchIndex < nMatch; ++nMatchIndex)
    {
        int nChar = 0;
        is >> nChar;
        vector<char> recordPerMatch;
        unsigned char ch = 0;
        for(int nCharIndex = 0; nCharIndex < nChar; ++nCharIndex)
        {
            is >> ch;
            if(ch != 'X')
            {
                recordPerMatch.push_back(ch - 48);
            }
            else
            {
                recordPerMatch.push_back('X');
            }
        }
        record.push_back(recordPerMatch);
        recordPerMatch.clear(); 
    }

    for(int nMatchIndex = 0; nMatchIndex < nMatch; ++nMatchIndex)
    {
        testRecord.push(record[nMatchIndex]);
        for( ; ; )
        {
            vector<char> temp = testRecord.front();
            vector<char> temp1(temp);
            vector<char> temp2(temp);
            bool tag = false;
            for(vector<char>::iterator iter = temp1.begin();
                iter != temp1.end();
                ++iter)
            {
                if((*iter) == 'X')
                {
                    testRecord.pop();
                    (*iter) = 10;
                    tag = true;
                    break;
                }       
            }

            if(tag == false)
            {
                finalTestRecord.push_back(temp1);
                break;
            }
            else
            {
                testRecord.push(temp1);

                for(vector<char>::iterator iter = temp2.begin();
                    iter != temp2.end();
                    ++iter)
                {
                    if((*iter) == 'X' && (iter+1) != temp2.end())
                    {
                        (*iter) = 10 + (*(iter + 1));
                        temp2.erase(iter + 1);
                        break;
                    }
                }
                testRecord.push(temp2);
            }
        }
        GetScore();
        while(testRecord.size())
        {
            testRecord.pop();
        }
    }

    return 0;
}

2006百度之星程序设计大赛预赛题目之饭团的烦恼 参考解答:【上一篇】
大牛coders,偶像也:【下一篇】
【相关文章】
  • 2006百度之星程序设计大赛预赛题目之饭团的烦恼 参考解答
  • 2006-06-01 (1) sizeof
  • 2006-06-02(1)强制类型转换
  • 日记 [2006年06月03日]
  • 2006年(第20届)电子信息百强企业名单
  • [2006.5.31 19:00]寄存器寻址问题
  • 2006-5.31的blog(小补)
  • Solaris10x86_install_oracle10g_DB笔记(20060331)
  • Solaris10x86_install_oracle10g_CL笔记(20060410)
  • office weekly21(2006-05-21~27)
  • 【随机文章】
  • jre1.5中文显示设置
  • CLanLib中的GUI
  • 一个大家不常见的问题!(快来看看吧!)
  • 关于C++的小结
  • VC++编译出错问题(1)fatal error C1900
  • Authorware自制拼图游戏
  • 好的软件开发理念……
  • x-scan扫描中---Nessus攻击脚本简介
  • bash脚本整数越界的解决方法
  • 拨号访问RS/6000的快速配置方法
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.