一、要求
给定一个字符串,从字符串中找出出现次数最多的字符。
二、实现
原理:利用数组来存储字符出现的次数,利用数组下标表示对应的字符。
2 #include <string.h>
3
4
5 //要统计的字符串
6 char *s = "aaffcsdf23aaaaa41678hjjmrfaaaaa";
7
8
9 int main(void)
10 {
11 int len,i;
12 int char_count;
13 char c;
14 //字符串中每个字符出现的次数,最多能表示128种字符(7位ASCII码)
15 char times[128]={0};
16
17 char_count = 0;
18 //字符串长度
19 len= strlen(s);
20
21 //统计字符串各个字符出现的次数
22 for(i=0;i<len;i++)
23 times[s[i]]++;
24
25 //找出出现次数最多的那一个字符
26 for(i=0;i<128;i++)
27 {
28 if(times[i]>char_count)
29 {
30 char_count = times[i];//出现次数,始终保存当前出现次数的最大值
31 c = (char)i;//是哪一个字符
32 }
33 }
34
35 printf("出现最多的字符是:%c ,出现的次数为:%d次\n",c,char_count);
36
37 return 0;
38 }
运行结果:
本文链接
Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎,使用 C++ 开发,基于OpenGL ES,基于 cocos2d-iphone,支持 WOPhone, iOS 4.1, Android 2.1 及更高版本, WindowsXP & Windows7,windows phone 8.
Cocos2d-X是一个开源的移动2D游戏框架,MIT许可证下发布的。这是一个C++ cocos2d-iPhone项目的版本。cocos2d-X发展的重点是围绕cocos2d跨平台。cocos2d-X提供的框架外,手机游戏,可以写在C+ +或者Lua中,使用API是cocos2d-iPhone完全兼容。cocos2d-X项目可以很容易地建立和运行IOS,Android的三星Bada,黑莓Blackberry操作系统和更多。cocos2d-X还支持Windows、Mac和Linux等桌面操作系统,因此,我们可以编写的源代码很容易在桌面操作系统中编辑和调试。
和学习任何其他语言,我们首先从helloworld开始,cocos2d-x工程中自带helloworld项目,我们就可以通过这个项目来看出cocos2d-x的基本结构。
开发逻辑相关的即是Classes和Resource文件夹,Classes文件夹放置代码,Resource放置资源(图片,声音,图片配置文件等)
程序结构:
在win32平台上,就是win32文件夹中的内容和Classes当中的内容,win32文件夹内就是main类,而Classes中是平台配置文件和我们的helloworld场景类
main类就算是win32平台的一个入口类启动程序
AppDelegate是应用真正的入口,在这里有平台的适配参数,找到导演类,启动我们的场景。
在AppDelegate除了构建函数和析构函数之外,就是处理暂停和重新开始的函数,initInstance函数处理不同平台的问题,在applicationDidFinishLaunching中就是处理导演类和
场景开始代码很易懂包括设置导演类帧每秒等参数。
然后是用摄像机的runWithScene开始场景
最后就是HelloWorldScene场景类,构建方法主要是建层等,关键的方法是init(),主要是构建场景中的
代码也很易懂,每次创建元素后将其使用this-〉addchild函数插入,即放入此场景,第二个参数就是绘制的顺序。
其中构建关掉程序的方法中传入了menuCloseCallback方法,即是本类中的menuCloseCallback方法,这样就完成了第一个程序helloworld
本文链接
这几天一直写上层逻辑,因为是sns游戏的,所以压力不是很大,但还是想做一套页游mmorpg类游戏的框架。闲暇时候就玩玩天龙八部,读读征途的代码。机缘巧合,遇见了之前天龙八部的服务器引擎工程师,交流了很久才知道,现在网上流传的天龙八部的版本已经很老很老了。据他说现在的天龙八部的服务器框架也加上了网关的设计,负责网络均衡;添加了消息队列,分离了通信和逻辑处理。
不过我仍然觉得旧框架可以负载现在的页游服务器,旧的线程机制是这样,每个线程负责一个地图,并且负责这个地图上面玩家的与客户端的通信、逻辑处理,负责这个地图上面的怪物AI。搜集了一些数据。
send && recv 是系统函数,每秒大概可以执行18w次。(听一个主程讲座记录)
线程每秒可以执行处理15w条消息(前项目所得数据)
线程每秒跑50帧,一帧大概20ms,这20ms可以驱动4k只怪物的AI(查询一个在线游戏所得)
现在我们假设一个线程负责一个地图,这张地图上面,大概有400只怪物,1000人,每人每秒大概3次操作。也就是说要处理大概3k条消息,驱动400只怪物,大概要有6k次的系统调用。发送处理,我们做这样的处理,不能实时的发送给客户端,每个连接每秒发送三次。
这样消息处理占用了20ms,send && recv的系统调用占用了33ms,抛去这些消耗,剩下的CPU资源完全可以驱动这400只怪物。
当然我们的每个线程一定要做成可以配置的,比如对于开服时候的新手村,一定要用独立的线程去负责,其他的70级-80级的地图我们可以让一个线程去负责2-3张地图。那么我们的页游服务器就可以这样设计: