如何用C/C++把9个1和9个0组成的所有数字穷举下来,并计入数组 30
展开全部
#include<iostream>
using namespace std;
int Max = 0x000001FF; //就是二进制 1 1111 1111
int BinToDec(int i)
{
int res = 0;
int cnt = 9;
while(cnt+1)
{
res *= 10;
res += bool(i&(1<<cnt));
--cnt;
}
return res;
}
int main()
{
int data[512]; //存放数字
for(int i=0; i<=Max; ++i)
{
data[i] = BinToDec(i);
cout << data[i] << '\t';
}
return 0;
}
其实就是输出二进制 0 0000 0000 ~ 1 1111 1111
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用递归求组合算法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
typedef __int64 lld;
lld a[1111111],tot;
void DFS(int deep,int one,int zero,lld sum)
{
if(deep==18)
{
a[tot++]=sum;
return ;
}
if(one<9)
{
DFS(deep+1,one+1,zero,sum*10+1);
}
if(zero<9)
{
DFS(deep+1,one,1+zero,sum*10);
}
}
int main()
{
int i;
tot=0;
DFS(0,0,0,0);
printf("tot=%d\n",tot);
for(i=0;i<tot;i++)printf("%018I64d\n",a[i]);
return 0;
}
typedef __int64 lld;
lld a[1111111],tot;
void DFS(int deep,int one,int zero,lld sum)
{
if(deep==18)
{
a[tot++]=sum;
return ;
}
if(one<9)
{
DFS(deep+1,one+1,zero,sum*10+1);
}
if(zero<9)
{
DFS(deep+1,one,1+zero,sum*10);
}
}
int main()
{
int i;
tot=0;
DFS(0,0,0,0);
printf("tot=%d\n",tot);
for(i=0;i<tot;i++)printf("%018I64d\n",a[i]);
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以考虑用位运算,数组用int长度足够了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询