??xml version="1.0" encoding="utf-8" standalone="yes"?> 1.l定一个字W串Q输出本字符串中只出Cơƈ且最靠前的那个字W的位置Q?/strong> 比如"abaccddeeef" 则是bQ输?/span>2 int find_char(const char *str) { int pos[256]; const char *p = str; if((!str)||!(*str))//I指针或者空?/span> { return -1; } memset(pos,-1,sizeof(pos)); //遍历一遍,存下每个字母的位|,如果存过一ơ,把位置讄?2 while (*p) { if (pos[*p] == -1) { pos[*p] = p - str; } else { pos[*p] = -2; } p++; } //遍历存储字母位置的数l,如果存有位置Q则q回 p = str; while (*p) { if (pos[*p]>=0) { return pos[*p]; } p++; } return -1; } 2Q给定一个整敎ͼ问这个整数{?span style="font-family: Times; font-size: 12px; font-style: normal; font-variant: normal; line-height: normal; ">2q制后,里面包含有多个1Q比如:10Q二q制表示为,1010则,输出2 int howmany(int x) { int count = 0; while (x) { if ((x&1) == 1) { count++; } x = x>>1; } return count; }
]]>
最q在看一些算法题Q看C螺旋队列。开始自己想了想Q但是想C一半,跟正思\有些距离Q感觉是跟每一圈的最大数有关pȝ公式。看了正答案后发现实如此。整理一下思\Q?/p>
1.首先要判断给出的坐标Qx,y)来计出坐标所属的圈c?/p>
2.出当前圈的最大的数maxQ可以根据这个数来推导给出坐标的值的关系?/p>
3.计算出每个边的基准?baseQ与最大值的关系Q即每个边上的中间的那个数?/p>
4.Ҏl出的坐标,判断它是属于Q上、下、左、右边)哪个边的。然后推D个数(value)与基准值和Qx,y)坐标的关pR?/p>
下面得出每条边的|首先考虑上边和下边,q?条边Q在基准值的基础上,由x坐标控制增减Q因此:
topValue=topBase+x=max+y+xQ上边,随x赠而赠Q因此是加xQ?/span>
bottomValue=bottomBase-x=max-5y-xQ下边,随x赠而减Q因此是减xQ?/span>
同理Q左边和双Q则在基准值的基础上,由y坐标控制增减Q因此:
leftValue=leftBase-y=max+3x-yQ左边,随y赠而减Q因此是减yQ?/span>
rightValue=rightBase+y=max-7x+yQ右边,随y赠而赠Q因此是加yQ?/span>
private static Object spiral(int x, int y)
{
int c = max(abs(x), abs(y));// 当前坐标所在圈
int max = (c * 2 + 1) * (c * 2 + 1);// 当前圈上最大?/span>
if (y -c)
{ // 上边
return max + (x + y);
}else if (x -c)
{// 左边
return max + (3 * x - y);
} else if (y == c)
{// 下边
return max + (-x - 5 * y);
}else
{ // 双
return max + (-7 * x + y);
}
}
于是惛_从奇C挑选位|,然后再从偶数位置挑选,q样能ɽI闲板块量不连l?/p>
例如Q如果有5个板块,3个主题,那么?Q?Q?的位|放入主题?/p>
一个小Demo如下Q?/p>
1: #include <stdio.h>
2:
3: int arrary[21] = {0,0,0};
4:
5: int ChooseAnEmpty()
6: {
7: int j = 0;
8:
9: for(j=1;j<=21;j+=2)
10: {
11: if(arrary[j] == 0)
12: {
13: return j;
14: }
15: }
16:
17: printf("------\n");
18:
19: for(j=2;j<=21;j+=2)
20: {
21: if(arrary[j] == 0)
22: {
23: return j;
24: }
25: }
26:
27: printf("is full\n");
28: return -1;
29: }
30: int main()
31: {
32: int i,pos;
33:
34: for(i = 0; i<23; i++)
35: {
36: pos = ChooseAnEmpty();
37: if(pos == -1)
38: {
39: break;
40: }
41: printf("empty pos = %d\n",pos);
42: arrary[pos] = 1;
43: }
44: }
文章出处Q?/span>http://blog.csdn.net/jack0106
作者联pL式:冯牮 fengjian0106@yahoo.com.cn
不同版本的meegopȝQ底层和中间层架构,大体是一致的Q也是可以定制裁剪的。区别主要在最上层的用户体验层Q比如handset版和notebook版的meegoQUI很不一?UI的开发环境,也不一?Q这文,是针对handset版meego的学习\U,做的一个ȝ。后面提高到的meegoQ未做明说明的情况下,都是Ҏhandset版的meegopȝ?/span>
一、基
1、编E语a
1.1 meego的图形界面,是基于qt开发的Q不用说QC++肯定是首选的开发语a?/p>
1.2 STL的用。qt自己实现了一套类STL接口Q和标准的STL仅有一些小的区别,而且也有api文档。之所以单独提到STLQ是因ؓq个东西太重要的Q它的核心内容,是容器和算法,q是c++E序中最基本的数据操作,一定要掌握?初学者,可以通过STL的中文教E来学习Q然后很Ҏp转到qt的类stl接口上编写代??/p>
1.3 meego是的中间层,不全是由qt开发的Q其中的一部分Q是由c语言写出来的。其实meego上很多中间层的服务程序,都是直接用的gnome桌面环境中的开源项目,而gnome的基Q就是基于c语言的gobjectpȝQ所以,c语言也是一个重要的开发语a?br />但是Qcq不是必ȝQ如果懂cQ相当于锦上添花Q后面在W二部分Q我会详l的解释?/p>
2、明一些概?/p>
2.1 首先明确一点,qt不仅仅是用来l图的,qt其实是一个很完善的底层库Q除了绘图,qtq融合了很多和UI无关的功能,比如|络、xml、sql{等Qqt都有相关的类和框架?/p>
2.2 meego是基于qt的,准确Ҏqͼ可以是这Pmeegol承qtQ开发了一套GUI?-libmeegotouchQmeego的界面,是用libmeegotouch开发的Q而隐藏在界面背后的功能性的代码Q则是用qt开发的?/p>
2.3 qt有一个非常好的文系l和众多的example codeQ一定要充分利用?/p>
2.4 虽然libmeegotouch也有文档和example codeQ但是,׃libmeegotouch仅仅是负责绘制GUIQ它的example code有局限性,而且数量也较,因此对于开发h员,一定还要通过qt example code来深入学习?/p>
3、qt/meego基础学习
3.1 qmake的用。qtE序使用qmake和pro文gq行工程理。请看文?qmake Tutorial --http://doc.qt.nokia.com/4.7/qmake-tutorial.html
3.2 qt的对象系l。请看文?Object Model -- http://doc.qt.nokia.com/4.7/object.html
?The Property System -- http://doc.qt.nokia.com/4.7/properties.html#qt-s-property-system
3.3 qt中的信号和槽函数Q这是qt的特色之一Q是对c++扩充后的新概c请看文?Signals & Slots --http://doc.qt.nokia.com/4.7/signalsandslots.html
3.4 qt中的事g传递和M件@环,L文档 The Event System --http://doc.qt.nokia.com/4.7/eventsandfilters.html ?Another Look at Events -- http://doc.qt.nokia.com/qq/qq11-events.htmlQ初学者可能会觉得q里很抽象,要理解事件@环,更基的一个概忉|文g的异步操作(select/poll/epoll 函数Q,q个可以随着开发的深入再慢慢体会?/p>
3.5 qt中的容器c,q就是前面提到的qt中的cSTL接口Q请看文?Container Classes --http://doc.qt.nokia.com/4.7/containers.html
4、meego/qt中的widget
4.1 不管是哪一UGUI库,都有widget的概念,相当于windows~程中的控g。按钮、文本编辑框、下拉菜单,q些都是widgetQwidget概念的引入,使得囑Ş界面~程更加的方便快捗?/p>
4.2 qt里面Q有两套l图pȝQ一套是QWidget+QLayoutItempȝQ这个是桌面环境~程中用的widgetQ另一套是Graphics View FrameworkQ这套系l比xserver更灵z,可以对基本的囑Ş元素做旋转操作,也初步实Cwidget的父cQGraphicsWidgetQ但是ƈ没有q一步实例化?br />关于Graphics View FrameworkQ请看文?Graphics View Framework --http://doc.qt.nokia.com/4.7/graphicsview.html
4.3 meego是用在屏q设备上的一个系l,如前所qͼQWidget是ؓ桌面环境设计的,不适合手持讑֤Q虽然QGraphicsWidgetq不完善Q但是Graphics View Framework有很强的灉|性,所以meego选择从QGraphicsWidgetl承Q专门ؓ屏q设备实C一套widget?-MWidget?/p>
QWidget和MWidget虽然是两套不同的widgetQ但是在设计理念和设计模式上Q基本是相同的,其是layoutpȝQ用方法都是类似的。因此,如果已经熟悉QWidget了,则MWidget也可以很快的上手。如果是新手Q则可以通过QWidget+QLayoutItem相关的技术文档来学习qt中layout的基本思\Q然后再阅读MWidget的example code。下面给Z些参考文,
Layout Management -- http://doc.qt.nokia.com/4.7/layout.html
Widgets and Layouts -- http://doc.qt.nokia.com/4.7/widgets-and-layouts.html
MWidget Layout -- http://apidocs.meego.com/1.1/platform/html/libmeegotouch/layouts.html
Common Components -- http://apidocs.meego.com/1.1/platform/html/index.html
4.4 在熟悉了widget+layout的基本理念和使用Ҏ后,可以开始看meego的example code了,阅读libmeegotouch的源码目录中的example子目录中的代码,q是学习meego开发的最好的办法。首先推荐阅ȝ是example目录中的子目?nbsp; tutorial_music_catalogueQ关于这个代码,可以参考文?a style="color: #336699; text-decoration: none; ">http://apidocs.meego.com/mtf/tutorial.html 中的介绍?/p>
4.5 qt中的widgetQ数量巨多,很容易让Z生恐惧感。但是到了meego中,׃是ؓ手持讑֤设计的,屏幕较小Qwidget的数量也了很多Q常用的widgetQ目前就只有10多个Q像按钮、文本编辑框q一cwidgetQ用法都很简单,很容易上手。唯一一个有一定难度的widgetQ就是MListQ这个东西是手机上常用的一UwidgetQ就是一个长的列表。MList使用了qt中的model/view frameworkQ请看文?nbsp; http://doc.qt.nokia.com/4.7/model-view-programming.html。libmeegotouch源码目录example中的子目录,apscannerQ是一个用了model/view框架的例子,要通过q个代码学习MList的用?/p>
5、meego/qt中常用的框架、技?/p>
5.1 动画框架Qqt提供了一个Animation FrameworkQ可以让widget动v来(其实是让QObject动v来)Q请看文?The Animation Framework -- http://doc.qt.nokia.com/4.7/animation-overview.html
5.2 qt中的多线E,L文Thread Support in Qt -- http://doc.qt.nokia.com/4.7/threads.html
5.3 meego是ؓ手持讑֤设计的,而现在流行的手机l端Q都有触摸屏Qqt中,也提供了对触摸屏手势的支持,L文档
Gestures Programming -- http://doc.qt.nokia.com/4.7/gestures-overview.html
Gestures and Multitouch -- http://apidocs.meego.com/1.1/platform/html/index.html
5.4 meego中,为widget引入了css的概念,可以用css文g来控制MWidget的许多属性,L文档 css in meego -- http://apidocs.meego.com/1.1/platform/html/libmeegotouch/styling.html
5.5 meego的国际化处理Q是Zqt的国际化Ҏ的,L文
Internationalization with Qt -- http://doc.qt.nokia.com/4.7/internationalization.html
Internationalisation Guidelines -- http://apidocs.meego.com/1.1/platform/html/libmeegotouch/i18n.html
二、深?br /> 前面的介l,着重于meego开发的基本技能,其是widget的用。隐藏在GUI后面的功能性代码的开发,meego也提供了很多优秀的编E框架?/p>
1、进E间通信。linux桌面环境最常用的通信方式是dbusQ而且dbus已经成ؓ一个标准,meego自然也是使用dbus?/p>
1.1 dbus原生是用c语言开发的Q同时可以绑定到很多面向对象的编E语a之上Q详l介l,可以参?a style="color: #336699; text-decoration: none; ">http://www.freedesktop.org/wiki/Software/dbus
1.2 gnome桌面开发中Q用的是dbus-glib库,q个是基于gobject对象pȝ的c库,详细介绍Q可以参?a style="color: #336699; text-decoration: none; ">http://library.gnome.org/devel/dbus-glib/unstable/index.html
1.3 qt中也l定了dbusQ详l介l,可以参?a style="color: #336699; text-decoration: none; ">http://doc.qt.nokia.com/4.7/intro-to-dbus.html
2、数据库
2.1 meegoq_上用了一个中心数据库QtrackerQ这个也是gnome桌面目中发展v来的一个技术,详细介绍Q可以参?nbsp;http://projects.gnome.org/tracker/
2.2 gnome桌面开发中Q用的是tracker?Zdbus)Q是Zgobject对象pȝ的c库,可以?a style="color: #336699; text-decoration: none; ">http://ftp.gnome.org/pub/GNOME/sources/tracker/0.9/ 下蝲
2.3 qt也对tracker做了一个绑定,有一个libqttracker库,可以?nbsp;http://maemo.gitorious.org/maemo-af/libqttracker/trees/master 下蝲
3、多媒体~程
3.1 qt有一套多媒体~程框架Phonon Q但是这q不是qt的最l目标。可以忽略这个框架?/p>
3.2 qt现在有一个单独的目Qqt-mobilityQ其中有一个新的多媒体~程框架 Multimedia --http://doc.qt.nokia.com/qtmobility-1.1.0/multimedia.htmlQ这个才是qt会L的方案,meego上也是用的这套框架?/p>
3.3 如果只是开发音?视频播放器,Multimedia已经_了,它把很多~解码的l节都隐藏了Q开发者可以集中精力开发用户体验。Multimedia的后端,使用的是gstreamerQgstreamer是gnome桌面目中发展v来的一套多媒体~解码框Ӟ是基于gobject对象pȝ的c库,可以参?a style="color: #336699; text-decoration: none; ">http://www.gstreamer.net/ Q如果需要灵zȝ开发功能更复杂的多媒体E序Q则可以使用gstreamer框架?/p>
4、即旉讯E序
4.1 gnome桌面目中,发展了一个即旉讯的库Qtelepathy(Zdbus)Q这是一个框Ӟ可以把不同的x通讯E序协议Ҏq来Q可以参?nbsp;http://telepathy.freedesktop.org/wiki/
4.2 原生的telepathyQ是Zgobject开发的c库,可以参?nbsp;http://telepathy.freedesktop.org/doc/telepathy-glib/?nbsp;http://telepathy.freedesktop.org/doc/book/
4.3 qt也绑定了telepathyQ提供了一个c++接口Q可以参?nbsp;http://telepathy.freedesktop.org/doc/telepathy-qt4/
5、meego开发中的c语言
从前面介l的4个框架来看,原生都是用c语言开发的Q而且都有Zgobjectpȝ的c接口。qt做的Q主要是对这cd层库的一个上层封装,或者是~程语言的绑定。对于开发者,在学习这些框架的时候,如果了解gobjectpȝQ学习v来肯定会更方便,而且很多可以参考的文Q也都是以c语言的原生接口ؓ例的Q包括大量的example codeQ也是用c写的。所以,在开发过E中Q基于gobject对象pȝ的c~程Q是开发者的W二个有力工兗?/p>