首页 > 代码库 > 【大坑特坑】第六届华为“创新杯”编程大赛初赛题目(第五场)

【大坑特坑】第六届华为“创新杯”编程大赛初赛题目(第五场)

简直没法吐槽华为的服务器质量了,登一次半小时,提交一次等半小时,然后第二个题的结果还不知道呢,服务器就挂了。。。

题目本身倒是还挺简单的。

A题是鸡兔同笼问题:

给出鸡和兔子的头数和脚数(可能不对),让你判断鸡的个数和兔子的个数。。小学经典问题。

关键是不合法的情况,总共有4种。

1、头比脚多。。

2、脚是奇数= =

3、脚>4*头或者脚<2*头.

so.出来了。

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;

int r,d;
void solve(int n,int m)
{
    r=m/2-n;
    d=n-r;
    cout<<"1 "<<d<<" "<<r<<endl;
}

int main()
{
    int h,f;
    cin>>h>>f;
    if(f%2!=0 || h>=f ||f<2*h||f>4*h)
        cout<<"0 0 0"<<endl;
    else
        solve(h,f);
    return 0;
}

第二个题则不知道对不对了,因为判了半个小时还tm不出结果。。

大意是一种传输数据的格式,分成三段:tag(4字节)、length(两字节)、data区(和length的长度相等),都采用连续的十六进制数表示传输流,问按tag排序之后的数据流结果。

感觉属于考察字符串切割和进制转换的题,如果有错误的话,可能是对非法的情况判断的还不够吧。

过大多数还是没问题的,反正也不知道结果- -

代码:

#include <iostream>
#include <cstring>
#include <string>
#include <cstdlib>
#include <algorithm>
using namespace std;

class TLV
{
public:
    string tagstr;
    int tag;
    int length;
    string lengthstr;
    string value;
};

bool cmp(TLV a,TLV b)
{
    return a.tag<b.tag;
}



int main()
{
    TLV pack[1009];
    string tar;
    cin>>tar;

    int pos=0,count=0;
    int p=0;
    while(pos<tar.size())
    {
        string tagcut,lengthcut,valuecut;

        //cout<<p<<endl;
        for(int i=pos;i<=pos+7;i++)
        {
            tagcut+=tar[i];
        }
        pack[p].tagstr=tagcut;
        for(int i=pos+8;i<=pos+11;i++)
        {
            lengthcut+=tar[i];
        }
        pack[p].lengthstr=lengthcut;

        pack[p].tag=strtol(pack[p].tagstr.c_str(),NULL,16);
        pack[p].length=strtol(pack[p].lengthstr.c_str(),NULL,16);
        for(int i=pos+12;i<pos+12+(pack[p].length*2);i++)
        {
            if(pos+12+(pack[p].length*2)>tar.size())
            {
                cout<<"msgerr"<<endl;
                return 0;
            }
            valuecut+=tar[i];
        }
        pack[p].value=http://www.mamicode.com/valuecut;>