去掉最高分和最低分求平均分数的问题
在百度知道看到个问题,原地址不记得了。题目大致是5位选手参加某歌唱比赛,然后6个评委依次为每位选手打分,最终要求出每位选手在去掉一个最高分和最低分后,自己的平均成绩是多少。然后有人给出了一个比较巧妙的答案,遍历二维数组中的每个元素的时候,“找出”最大值和最小值,然后就去掉这个最大值和最小值求出平均值了。
在百度知道看到个问题,原地址不记得了。题目大致是5位选手参加某歌唱比赛,然后6个评委依次为每位选手打分,最终要求出每位选手在去掉一个最高分和最低分后,自己的平均成绩是多少。然后有人给出了一个比较巧妙的答案,遍历二维数组中的每个元素的时候,“找出”最大值和最小值,然后就去掉这个最大值和最小值求出平均值了。
之前在弄完这个十六进制字符串异或的工具后,发现直接按回车键就直接关闭了工具。网上搜了下解决方案,然后自己的总结如下4种方法:
如前文小节5中所述,只要将“进行异或”这个按钮属性中的Default Button设置为"TRUE"就行了。但是这样就直接触发这个按钮对应的事件OnBnClickedButton1,而不是对输入的数据进行合法性检查。
首先我们需要找到这两个函数的位置,方法有两种,效果都是殊途同归:
继前文《图文实例说MFC制作工具的心得(一)》,这篇文章继续写几点心得。
由于异或的时候可以直接调用《十六进制字符串异或》一文中的十六进制字符串异或方法void hexstrxor(char * HexStr1, char * HexStr2, char * HexStr)
。
但是Edit Control
控件添加变量HexStr1
、HexStr2
都是CString类型,所以需要转换。由于项目的字符集是使用多字节字符集
,所以可以通过(LPSTR)(LPCTSTR)CString
方法强制将CString数据转换成char *指针类型,这样就可以直接调用了hexstrxor((LPSTR)(LPCTSTR)HexStr1, (LPSTR)(LPCTSTR)HexStr2, HexStrXorResult);
。
在写完上一篇文章《十六进制字符串异或》后,网上查了下貌似没有十六进制字符串异或的工具,于是想自己用C++写一个。由于之前没弄过MFC,所以周末花了两天时间边学边做,最后效果如下:
十六进制字符串异或是C/C++工作中经常遇到的情况,因此自己写了一个异或方法。程序中关键的三点:
弄清十六进制字符串异或的思路:一个十六进制字符其实表示的是一个字节的低4位,但是在ASCII码表中,它是作为一个字符,即占用了1个字节。所以需要先把这个字符转换成对应的十进制数(范围是0~15),这个就是int char2int( char input )
函数所做的工作;同理在异或完后,需要根据ASCII码表将范围是0~15的字符
转换成对应的占用1字节的字符串中的字符,这个就是int int2char( char input )
函数所做的工作。
PS:这其实就是前面这两篇文章的提炼—— 《C语言将十进制字符串转成十进制整数》、《C语言将十六进制字符串转成十进制整数》。
前段时间Q群里有提问如下,编写程序解决一个学生按规则依次报数的体育游戏问题。编程语言不限,Java, C#, Ruby, C++, Js, Python, Scala, objective-C统统可以,小语种也没问题。
网上关于有符号、无符号字符转换成有符号、无符号整形数据的问题,自己写了一个测试程序,分析了下,挺有意思的。
用的是自己的win7 64位系统,处理器当然是Intel的,因此是前文提到的小端模式
。默认按32位(总线)处理,即一个整型4个字节,长度共 2^32 = 4294967296 字节;有符号字符char类型数据的范围是 -128~127 (对应二进制 11111111~01111111),无符号字符 unsinged char 类型数据范围是 0~255(对应二进制 00000000~11111111)。