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

分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

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

 

题目

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

 

解决代码及点评



/*
    若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}; //如果使用过元素 则定义其为1


bool 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 = 0;
	while(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)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”

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

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

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

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

基于visual Studio2013解决面试题之1305字符串所有子集再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

上一篇:JavaEE中级.20190613.JSTL的使用. if标签.choose、when和otherwise标签.forEach标签.formatNumber标签.formatDate标签.


下一篇:Excel 2010 SQL应用059 格式化百分数