如何用C/C++把9个1和9个0组成的所有数字穷举下来,并计入数组 30

 我来答
非突_real
2013-05-08 · TA获得超过330个赞
知道小有建树答主
回答量:501
采纳率:0%
帮助的人:383万
展开全部
#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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
宁小哥的分享
2013-05-08 · TA获得超过273个赞
知道小有建树答主
回答量:228
采纳率:0%
帮助的人:310万
展开全部
可以用递归求组合算法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28b4182
2013-05-08 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1853万
展开全部
#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;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangning_os
2013-05-08 · TA获得超过277个赞
知道小有建树答主
回答量:539
采纳率:33%
帮助的人:229万
展开全部
你可以考虑用位运算,数组用int长度足够了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式