问题描述:列出一个集合的元素个数为k的所有子集。
思路:在字典顺序列出所有子集的基础上判断元素个数就可以了,比较简单。代码如下:
2 #define MAX 1000
3
4 int main()
5 {
6 int n=5;
7 int set[MAX]={1};
8 int index=0;
9 int count=2;
10 int k=3;
11 while(set[0]!=n)
12 {
13 if(set[index]<n)
14 {
15 set[index+1]=set[index]+1;
16 index++;
17 }
18 else
19 {
20 index--;
21 set[index]++;
22 }
23 int a_index;
24 count++;
25 if(index==k-1)
26 {
27 printf("%d:{",count);
28 for(a_index=0;a_index<=index;a_index++)
29 printf("%d ",set[a_index]);
30 printf("}\n");
31 }
32 }
33 return 0;
34 }
参考资料:《C语言名题精选百则技巧篇》
如果你觉得我的文章对你有帮助,请推荐一下,非常感谢!
本文链接
在c/c++代码中,有时需要实现计时功能,比如某个时刻开始计时,然后到另一时刻时,计算距开始计时的时刻毫秒数。
通过在起始时刻和停止时刻分别调用下面的代码,返回的时间相减,便可获得这段时间的毫秒数,其跨Windows、Linux、VxWorks三个平台。
具体来说:起始时刻为类的构造函数,停止时刻为类的析构阶段。
#ifdef WIN32
#define OS_WINDOWS WIN32
#include <windows.h>
#endif
#ifdef LINUX
#include <unistd.h>
#include <sys/time.h>
#include <netinet/in.h>
#endif
#ifdef VXWORKS
#include "vxworks.h"
#include <tickLib.h>
#include <sysLib.h>
#endif
#define ULONAG unsigned long
ULONGA getTickCount(void)
{
ULONGA currentTime;
#ifdef WIN32
currentTime = GetTickCount();
#endif
#ifdef LINUX
struct timeval current;
gettimeofday(¤t, NULL);
currentTime = current.tv_sec * 1000 + current.tv_usec/1000;
#endif
#ifdef OS_VXWORKS
ULONGA timeSecond = tickGet() / sysClkRateGet();
ULONGA timeMilsec = tickGet() % sysClkRateGet() * 1000 / sysClkRateGet();
currentTime = timeSecond * 1000 + timeMilsec;
#endif
return currentTime;
}
本文链接
由于项目的需要,我们需要连接许多类型的数据库。同时我们希望对数据库的操作能够提供一个统一的访问接口。现在网上有不少开源的,但是对于用惯了VC ADO的人来说,这些接口设计的感觉真是有点反人类。比较好用的有一个人SQLAPI++,但是是要收费的,破解版的也没有源代码,那种代码无法掌握在自己手里的感觉,总是感觉不爽。于是便自己开始写一个。
根据初步的设计,有了以下的一个模型:
这个只是一个初步的模型。具体的实现中,主要有两个类,一个是CDbConnect和CDbRecordSet。这两个类主要是提供了访问接口。同时还有一个CDbFactory为了构建CDbConnect对象,这个类中主要是一系列的静态函数。
目前该功能已经完全实现,暂时支持的数据库有MS SQL/Oracle/Postgresql/sqlite,其他的需要支持在以后来添加,个人觉得拓展性还是很强的。
主要的三个对外接口的类设计如下:
第一次用这个,发现贴图很蛋疼,接下来我会接着更新,代码也会给出来,希望大家一起交流,写一个好的DbConnect。
本文链接