2013-09-12 16:41:24

题目描述

某省会城市街道纵横交错,为了监控路灯的运行状况,每条街道使用一个数字字符串标识该街道上所有路灯的运行状况。
假设路灯只有如下3种状态(分别用数字0, 1, 2标识,一盏路灯只对应其中一种状态):
0 标识路灯熄灭;
1 标识路灯开启;
2 标识路灯故障;
请根据输入的字符串,找出该街道上连续的处于相同状态的路灯的最大个数。若两种状态的路灯数量相同,则返回最先出现的路灯状态。

输入

街道上连续的路灯组成的状态字符串。字符串中只包含数字,每个路灯的状态为0,1,2中的一种状态。如“1101”代表4盏路灯,第3盏路灯为熄灭状态,其它3盏为开启状态。

输出

连续为相同状态的路灯的最大数量;

上述路灯的状态;

要求:先输出数量,再输出状态,两个整数间采用一个空格间隔。如输出:

53 2

样例输入

112200111

样例输出

3 1

提示

OK

地区

成都研究所

题目描述

由实部和虚部组成,形如(a,bi)这样的数,称为复数。通信系统中,通常用32bit数来表示复数(高16bit表示实部,低16bit表示虚部),如整数524295(16进制为0x00080007)所代表的复数,实部为0x0008,虚部为0x0007。
有别于实数运算,复数加、减、乘、除运算定义如下:
复数加公式:(a,bi) + (c,di) = (a + c),(b + d)i
复数减公式:(a,bi) + (c,di) = (a - c),(b - d)i
复数乘公式:(a,bi) * (c,di) = (ac - bd),(ad + bc)i
复数除公式:(a,bi) / N = (a/N),(b/N)i
题目要求,输入N个复数,计算这个N个复数的平均值,复数Avg = (复数1*复数2 + 复数3*复数4 + … + 复数N-1*复数N) / N。
复数加、复数减、复数乘、复数除的结果仍然为复数,实部和虚部均为16bit有符号数,计算过程中,当结果大于32767(0x7fff)时,输出32767;当计算结果小于-32768(0x8000)时,输出-32768。

输入

输入共计两行

有别于实数运算,复数加减乘除运算定义如下第一行包含1个整数,表示输入复数个数N(N为偶数,N不大于1000)

第一行包含1个整数,表示输入复数个数N(N为偶数,N不大于1000)

输出

经计算得到的复数的平均值。

样例输入

4
262149,393223,524297,655371

262149 = 0x40005,393223 = 0x6007,524297 = 0x8009,655371 = 0xA00B

[(4+5i)*(6+7i) + (8+9i)*(10+11i)]/4 = (-28+236i)/4 = -7+59i

-7对应的16位有符号数为65529,59对应的16位有符号数为59,对应的32位有符号数为int((-7+65536)*65536 + 59 ) = -458693

4,

-196613,393223,-458761,655371

[(-4-5i)*(6+7i) + (-8-9i)*(10+11i)]/4 = (28-236i)/4 = 7-59i,对应的32位有符号数为:

int(7*65536 + (65536-59 ) = 524229

对应的4个数为:-196613,393223,-458761,655371

样例输出

-458693

提示

地区

成都研究所


注意几点:

  1. 对于复数平均值的题目,要注意数据类型,在代码中有详细的说明;
  2. 注意输入非法的检查;
  3. 注意边界条件的测试。

代码:

  1 #include <iostream>
  2 #include <cassert>
  3 using namespace std;
  4
  5 const size_t SIZE = 1000;
  6
  7 void CheckValidInput(const char *pStrState)
  8 {
  9     assert(pStrState != NULL);
 10     char *pCur = (char *)pStrState;
 11
 12     while (*pCur)
 13     {
 14         assert(*pCur >= '0' && *pCur <= '2');
 15         ++pCur;
 16     }
 17 }
 18
 19 void CountLamp(const char *pStrState,char &state,size_t &count)
 20 {
 21     CheckValidInput(pStrState);
 22
 23     count = 0;
 24     state = '\0';
 25
 26     char *pCur = (char *)pStrState;
 27     char curChar = '\0';
 28     size_t curTimes = 0;
 29
 30     while (*pCur)   //对非法状态的处理???
 31     {
 32         curTimes = 0;
 33         curChar = *pCur;
 34
 35         while (*pCur && *pCur == curChar)
 36         {
 37             ++curTimes;
 38             ++pCur;
 39         }
 40
 41         if (curTimes > count)
 42         {
 43             state = curChar;
 44             count = curTimes;
 45         }
 46     }
 47 }
 48
 49 const size_t BitWidth = 16;
 50 const int Max = 65535;
 51 const int MaxPositiveNum = 32767;  //2^15 - 1,是2与15异或的结果减1
 52 const int MinNegativeNum = -32768;
 53
 54 //需要溢出处理,直接定义为short类型不能按照
 55 //当结果大于32767(0x7fff)时,输出32767;当计算结果小于-32768(0x8000)时,输出-32768
 56 //的方式处理
 57 short HandleOverFlow(int num)  //返回值类型
 58 {
 59     if (num < MinNegativeNum)
 60     {
 61         return MinNegativeNum;
 62     }
 63     else if (num > MaxPositiveNum)
 64     {
 65         return MaxPositiveNum;
 66     }
 67
 68     return num;
 69 }
 70
 71 int ComplexAdd(const int compNum1,const int compNum2)
 72 {
 73     short ar = compNum1 >> BitWidth;
 74     short ai = compNum1 & Max;
 75     short br = compNum2 >> BitWidth;
 76     short bi = compNum2 & Max;
 77
 78     cout<<"("<<ar<<" + j*"<<ai<<") + ("<<br<<" + j*"<<bi<<") = ";
 79
 80     int sumr = ar + br;   //需定义为int类型,保证溢出处理时按要求的
 81     int sumi = ai + bi;
 82
 83     sumr = HandleOverFlow(sumr);  //HandleOverFlow返回即为short类型的
 84     sumi = HandleOverFlow(sumi);
 85
 86     cout<<sumr<<" + j* "<<sumi<<endl;
 87     return ((sumr << BitWidth) | (sumi & Max) );
 88 }
 89
 90 int ComplexMult(const int compNum1,const int compNum2)
 91 {
 92     short ar = compNum1 >> BitWidth;   //定义为short类型即可
 93     short ai = compNum1 & Max;
 94     short br = compNum2 >> BitWidth;
 95     short bi = compNum2 & Max;
 96
 97     cout<<"("<<ar<<" + j*"<<ai<<") * ("<<br<<" + j*"<<bi<<") = ";
 98
 99     int multr = ar * br - ai * bi;  //要定义为int类型,而非short类型,否则在溢出时,不能按照要求的溢出处理输出
100     int multi = ar * bi + ai * br;
101
102     multr = HandleOverFlow(multr);
103     multi = HandleOverFlow(multi);
104
105     cout<<multr<<" + j* "<<multi<<endl;
106
107     return ((multr << BitWidth) | (multi & Max) );
108 }
109
110 int  ComplexDivideN(const int  compNum1,const int N)
111 {
112     short ar = compNum1 >> BitWidth;
113     short ai = compNum1 & Max;
114
115     cout<<"("<<ar<<" + j*"<<ai<<") / "<<N<<" = ";
116
117     int divider =  (short)ar / N;   //divider、dividei定义为int、short都可
118     int dividei =  (short)ai / N;
119
120     cout<<"("<<divider<<" + j* "<<dividei<<")"<<endl;
121
122     return ( (divider << BitWidth) | (dividei & Max) );
123 }
124
125 int ComplexMultAddDivide(const int *compArray,const int n)
126 {
127     assert(compArray != NULL);
128     assert(n > 0 && n <= 1000 && (n % 2 == 0));
129
130     int index;
131     long long sum = 0;
132
133     for (index = 0;index < n;index += 2)
134     {
135         sum = ComplexAdd( sum,ComplexMult(compArray[index],compArray[index + 1]) );
136     }
137
138     return ComplexDivideN(sum,n);
139 }
140
141 void TestDriver()
142 {
143     //char *pStrState = "112200111";
144     //char *pStrState = "112200";
145     //char *pStrState = "12200";
146     //char *pStrState = "1200";
147     /*char *pStrState = "";
148     char state = '\0';
149     size_t count = 0;
150     CountLamp(pStrState,state,count);
151
152     cout<<"the state appears most is : "<<state<<endl;
153     cout<<"the times is : "<<count<<endl;*/
154
155
156     //int compArray[SIZE] = {1,0xff00ff};
157     int compArray[SIZE] = { 262149,393223,524297,655371 };
158     //int compArray[SIZE] = { -196613,393223,-458761,655371 };
159     //int compArray[SIZE] = { 32767,32767,-32767,32767 };  //溢出测试
160     //int compArray[SIZE] = {524297,655371};
161     int n = 4;
162     int average = 0;
163     average = ComplexMultAddDivide(compArray,n);
164
165     cout<<"the average is : "<<average<<endl;
166 }
167
168 int main()
169 {
170     TestDriver();
171     return 0;
172 }

运行结果:

(4 + j*5) * (6 + j*7) = -11 + j* 58
(0 + j*0) + (-11 + j*58) = -11 + j* 58
(8 + j*9) * (10 + j*11) = -19 + j* 178
(-11 + j*58) + (-19 + j*178) = -30 + j* 236
(-30 + j*236) / 4 = (-7 + j* 59)
the average is : -458693
请按任意键继续. . .

【 2013华为杯编程大赛成都第三组前两题试题及答案】相关推荐

  1. 华为创新杯编程大赛 java_2012年华为软件校园招聘编程测验(又名:2012华为创新杯编程大赛)软件Java语言类原题与解答...

    特别说明:由于本人编程水平有限,算法特别糟糕,所提供解答为个人随心所写,后两题时间复杂度都为O(n*n),这显然不是阅卷人员希望看到的,希望路过的各位大牛能多多指教,不吝赐与小可更佳的设计. 1. 电 ...

  2. [JAVA][2013蓝桥杯模拟赛 JAVA本科B组][第四题:二阶魔方]

    第四题:二阶魔方 题目描述: 魔方可以对它的6个面自由旋转. 我们来操作一个2阶魔方(如图1所示) 为了描述方便,我们为它建立了坐标系. 各个面的初始状态如下: x轴正向:绿 x轴反向:蓝 y轴正向: ...

  3. 杨超越杯编程大赛上热搜:不懂技术真不敢追星

    别惊讶!人工智能时代即将到来! https://edu.csdn.net/topic/ai30?utm_source=cxrs_bw 作为程序员,粉丝追星似乎与"麻烦"相挂钩.例如 ...

  4. 深访杨超越杯编程大赛发起人 还原硬核粉丝追星全过程

    欢迎关注"创事记"的微信订阅号:sinachuangshiji 文/石灿 来源:刺猬公社(ID:ciweigongshe) "大家加油,我要退群了,被老婆看到不好.&qu ...

  5. 硬核粉丝 | 清华双胞胎“YCY Dance Now”杀进超越杯编程大赛决赛

    作者 | Jane 出品 | AI科技大本营(id:rgznai100) 从"黄蓉 AI 换脸 杨幂"."首届杨超越编程大赛"."cxk 流量或打篮球 ...

  6. 编程队伍队名_#杨超越杯编程大赛#-这次不拼运气,拼实力!

    不要惊讶,你没有看错,这次编程大赛的名字确实是叫杨超越杯,但是并不是杨超越组织的,事实的真相是杨超越的男粉组织了第一届杨超越杯编程大赛,现在已有200多名程序员报名参加,硬核男粉赶快行动起来吧! [比 ...

  7. 超越杯编程大赛前线报道

    一个月前发了篇 经过这一个月的组队.开发阶段,超越杯编程大赛正式进入了比赛投票阶段: 而我呢,成功报名之后,阴差阳错地变成了1号队伍--说前排围观,连座位都是第一排第一号的位置,你们来感受下: 编号纯 ...

  8. python编程大赛规则_如何评价「杨超越杯编程大赛」?

    我是一名大二在校生.之前在刷微博的时候,突然看到月芽们要举办第一届超越杯编程大赛,我顿时心头一震:现在追星不容易啊,没点技能都不敢出来混了.我就想着要拿什么项目去参加这次比赛,后来看到潘伟洲大佬招队员 ...

  9. 程序员追星如此硬核?杨超越杯编程大赛获奖项目大盘点!

    不久前,微博热搜火了一个让程序员们一脸懵逼的话题,那就是 #杨超越杯编程大赛#,硬核男粉的追星之路由此起航. 比赛从开始到完结,基本每一个比赛节点都出现在微博热搜,当追星遇上程序员,当饭圈遇上码农,跨 ...

最新文章

  1. Almost sorted interval
  2. Kubernetes 稳定性保障手册 -- 日志专题
  3. 网络编程懒人入门(三):快速理解TCP协议一篇就够
  4. 【FBI WARNING】一些Noip的黑科技 持续整理!
  5. Docker 方式安装 gitlab ( 阿里云ECS )
  6. 如何打造高质量的SSP广告引擎(内部干货分享)
  7. 将数据库返回的ResultSett转换成List装Map形式的方法(ResultSetToList)
  8. 动态字段无法双向绑定_ASP.NET Core Blazor Webassembly 之 数据绑定
  9. LIS(最长上升子序列)的 DP 与 (贪心+二分) 两种解法
  10. 消息队列技术终结者(一)—通俗深刻地认识JMS(即Java Message Service)
  11. 捷联惯导系统学习4.2(捷联惯导误差方程)
  12. Cocos Creator 如何在 VideoPlayer 上面放置 UI 控件
  13. 经济学原理(超星尔雅)
  14. 硬件固件名称在软件测试中指什么,固态硬盘升级固件有什么用?固态硬盘怎么升级固件?...
  15. 隐形缝针法_裤腰大了怎么改小的隐形针法
  16. vb.net 教程 5-21 拓展 如何给IE浏览器截图
  17. WIFI智能音箱技术方案开发
  18. 计算机英语中bar是什么意思啊,bar是什么意思
  19. php 通配符删除文件,如何使用通配符删除文件夹?
  20. 时间函数millis( )

热门文章

  1. 游戏服务器架构-设计模式之发布订阅模式
  2. (四)nodejs循序渐进-函数,类和对象(基础篇)
  3. caffe安装篇(一)
  4. 架构分享--微博架构
  5. 机器学习问题总结(01)
  6. 面试--Linux命令总结
  7. 《C++ Primer 5th》笔记(1 / 19):C++基础
  8. 安卓布局位置,dp与px的区别
  9. MySQL Mac安装教程
  10. RuntimeException 和 Exception 区别、异常的子父级关系