基于visual Studio2013解决面试题之1305字符串所有子集

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               



题目



解决代码及点评

  1.   
  1.   
/*    若S是n个元素的集合,则S的幂集P(S)定义为S所有子集的集合。例如,     S=(a,b,c),P(S)={() ,(a),(b),(c),(a,b),(a,c),(b,c),(a,b,c)}给定S,写一递归算法求P(S)。*/#include <iostream>#include <string>using namespace std;char nArrTmp[20] = {0}; //如果使用过元素 则定义其为1bool DecreaseArr(char *pnArr, int nLen){    for (int i = 0; i < nLen; i++)    {        if (pnArr[i] < pnArr[i+1])        {            return false;        }    }    return true;}//pnArr 原集合 pnArrb子集的集合 n:子集中元素个数 void Select(char *pnArr, char *pnArrb, int n, int K){    if (n >= 0)    {        for (int i = 0; i < strlen(pnArr); i++)        {            if (nArrTmp[i] == 0)            {                pnArrb[n] = pnArr[i];                nArrTmp[i] = 1;                                Select(pnArr, pnArrb, n-1, K);                nArrTmp[i] = 0;            }        }    }    else    {        if (DecreaseArr(pnArrb, K))        {            cout<<"(";            for (int i = 0; i < K; i++)            {                            cout<<pnArrb[i]<<" ";            }            cout<<")"<<endl;         }    }}    int main()     {    char *pszBuf = "abc";        cout<<"()"<<endl;    for (int i = 1; i <= strlen(pszBuf); i++)    {        char *pszBufb = new char[i];        Select(pszBuf, pszBufb, i-1, i);    }        system("pause");    return 0;}
/* 有40亿个整数,在文件里保存,现在要找出这个文件里没有的某个整数,找到一个就行 这个40亿个整数大概要花掉4G内存,全部读出来是不可取的 我们可以通过位域来标记哪些存在哪些不存在 这样一个整数可以表示32个整数的存在情况,需要的内存是4G/32 = 1G/8 = 128M 然后将整数一个个读出来,根据整数的值,标记位域,最后再查找位域,哪个位置是0即可*/#include <iostream>#include <stdio.h> using namespace std;#define BITSPERWORD 32 #define SHIFT 5 #define MASK 0x1F #define N 10000000 int a[1 + N/BITSPERWORD]; void set(int i) {  a[i>>SHIFT] |= (1 <<(i & MASK));   //第i位清零} void clr(int i){  a[i>>SHIFT] &= ~(1 <<(i & MASK)); //第i位1} int test(int i){  return a[i>>SHIFT] & (1 <<(i & MASK)); } int main(){  int i;  for (i = 0; i < N; i++)   clr(i);  while (scanf_s("%d", &i) != EOF)   set(i);  i = 0while(i<N) {  if (test(i))       cout<< i<<" ";  i++; } system("pause"); return 0; }


代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果








           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值