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 #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 = '