比如现在有个二维数组 a[1024][10],想往里面填充数据,填充方式如下所展示: AAAAAAAAAA //没有B的形式
AAAAAAAAAB //下面10行是1个B的情况,行个数可以通过组合C1/10算出
AAAAAAAABA
....
BAAAAAAAAA
AAAAAAAABB //下面45行是2个B的情况,行个数可以通过组合C2/10算出
AAAAAAABAB
...
AAAAAAABBB //下面120行是3个B的情况,行个数可以通过组合C3/10算出
AAAAAABABB
...... .... //按照此规律下去,最后一行全是B
BBBBBBBBBA
BBBBBBBBBB //最后一行
不知道各位看懂了么,每行n个B的情况,可以通过Cn/10的组合计算公式算出来所需要的行数。 想了好久不知道该如何下手,高手把代码贴上来参考参考吧》?
AAAAAAAAAB //下面10行是1个B的情况,行个数可以通过组合C1/10算出
AAAAAAAABA
....
BAAAAAAAAA
AAAAAAAABB //下面45行是2个B的情况,行个数可以通过组合C2/10算出
AAAAAAABAB
...
AAAAAAABBB //下面120行是3个B的情况,行个数可以通过组合C3/10算出
AAAAAABABB
...... .... //按照此规律下去,最后一行全是B
BBBBBBBBBA
BBBBBBBBBB //最后一行
不知道各位看懂了么,每行n个B的情况,可以通过Cn/10的组合计算公式算出来所需要的行数。 想了好久不知道该如何下手,高手把代码贴上来参考参考吧》?
其实 用 01代替AB填充也行。
最终的结果是要把 两个字母AB(或数字01)所有的组合列出来,存放在二维数组中
可以不必管排序的问题
0000000000~1111111111的填充
找出0~1023之间含有几个1的二进制数
假设符号^为乘方
含有1个1的是2^x (9>=x>=0)
含有2个1的是2^x+2^y (9>=x>y>=0)
含有3个1的是2^x+2^y+2^z (9>=x>y>z>=0)
.....还有一种方法是
int i=0;
while(x)
{
x=x&(x-1);
i++;
}
这样直接判断某个2进制数含有几个1,从0~1023循环判断一下就好
using namespace std;int nHalf =1;
void SetValue(int a[][10],int n)
{
nHalf *= 2;
int nPart = 1024/nHalf;
for(int i = 0;i < nHalf;i++)
{
if(i % 2 == 0)
for(int j = 0;j < nPart;j++)
a[i*nPart+j][n] = 0;
else
{
for(int j = 0;j < nPart;j++)
a[i*nPart+j][n] = 1;
}
}
}void main()
{
int a[1024][10];
for(int i = 0;i < 10;i++)
{
SetValue( a,i);
}
for(i = 0;i < 1024;i++)
{
cout<<i<<" = ";
for(int j = 0;j < 10;j++)
{
cout<<a[i][j];
}
cout<<endl;
}
}试试我的这个算法是否符合你的要求!!
这个符合,是按列来排的吧??能不能讲讲思路?没看明白呀。
每次给啊【1024】【10】的一列赋值,来确定其0(A),1(B)的分割情况
例如:
第一次:第一列
0-511 赋值为0
512-1023 赋值为1
第二次:第二列
0-255赋值为0
256-511 赋值为1
512-767 赋值为0
760-0.23 赋值为1看到规律来吧,实际就是一个
1
|
|
_____________
| |
2 2
| |
________ __________
| | | |
3 3 3 3按规律赋值的过程#include <iostream>
using namespace std; int nHalf =1;
void SetValue(int a[][10],int n)
{
nHalf *= 2; //切分区域数
int nPart = 1024/nHalf; //n列的切分大小
for(int i = 0;i < nHalf;i++)
{ //切分区域的赋值
if(i % 2 == 0)
for(int j = 0;j < nPart;j++)
a[i*nPart+j][n] = 0;
else
{
for(int j = 0;j < nPart;j++)
a[i*nPart+j][n] = 1;
}
}
} void main()
{
int a[1024][10];
for(int i = 0;i < 10;i++)
{ //
SetValue( a,i);
}
for(i = 0;i < 1024;i++)
{
cout < <i < <" = ";
for(int j = 0;j < 10;j++)
{
cout < <a[i][j];
}
cout < <endl;
}
}