简直没法吐槽华为的服务器质量了,登一次半小时,提交一次等半小时,然后第二个题的结果还不知道呢,服务器就挂了。。。
题目本身倒是还挺简单的。
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=valuecut; cout<<pack[p].tagstr<<" is: "<<pack[p].lengthstr<<endl; cout<<pack[p].tag<<"isnum:"<<pack[p].length<<"value is"<<pack[p].value<<endl; pos+=(12+(pack[p].length*2)); p++; } sort(pack,pack+p,cmp); for(int i=0;i<p;i++) { cout<<pack[i].tagstr<<pack[i].lengthstr<<pack[i].value; } cout<<endl; return 0; }
【大坑特坑】第六届华为“创新杯”编程大赛初赛题目(第五场)
时间: 2024-10-25 04:58:33