分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net
题目
解决代码及点评
/*
若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)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net