a[n][m]
当n=1;m=2;
(1)a[1][1]=x;
(2)a[1][2]=x当n=2;m=2
(1){a[1][1]=x,a[2][1]=x};
(2){a[1][1]=x,a[1][2]=x};
(3){a[1][2]=x,a[2][1]=x};
(4){a[1][2]=x,a[2][2]=x}当n=3;m=2
(1){a[1][1]=x,a[2][1]=x,a[3]a[1]=x};(2){a[1][1]=x,a[2][1]=x,a[3][2]=x;}
(3){a[1][1]=x,a[2][2]=x,a[3]a[1]=x};(4){a[1][1]=x,a[2][2]=x,a[3][2]=x;}
(5){a[1][2]=x,a[2][1]=x,a[3]a[1]=x};(6){a[1][2]=x,a[2][1]=x,a[3][2]=x;}
(7){a[1][2]=x,a[2][2]=x,a[3]a[2]=x};(8){a[1][2]=x,a[2][2]=x,a[3][2]=x;}当n=4;m=2;
...................
当n=5;m=2
.....................
现假设M不变为2减少难度,N是可以改变的也就是有2^N的组合赋值方式请问这种算法
这样解决啊,这样编!
当n=1;m=2;
(1)a[1][1]=x;
(2)a[1][2]=x当n=2;m=2
(1){a[1][1]=x,a[2][1]=x};
(2){a[1][1]=x,a[1][2]=x};
(3){a[1][2]=x,a[2][1]=x};
(4){a[1][2]=x,a[2][2]=x}当n=3;m=2
(1){a[1][1]=x,a[2][1]=x,a[3]a[1]=x};(2){a[1][1]=x,a[2][1]=x,a[3][2]=x;}
(3){a[1][1]=x,a[2][2]=x,a[3]a[1]=x};(4){a[1][1]=x,a[2][2]=x,a[3][2]=x;}
(5){a[1][2]=x,a[2][1]=x,a[3]a[1]=x};(6){a[1][2]=x,a[2][1]=x,a[3][2]=x;}
(7){a[1][2]=x,a[2][2]=x,a[3]a[2]=x};(8){a[1][2]=x,a[2][2]=x,a[3][2]=x;}当n=4;m=2;
...................
当n=5;m=2
.....................
现假设M不变为2减少难度,N是可以改变的也就是有2^N的组合赋值方式请问这种算法
这样解决啊,这样编!
解决方案 »
- MFC重绘的问题,谢谢!
- 使用CArray 出现指针错误。。急
- No such file or directory
- 关于WSAAsyncSelect的一个简单问题!可是我却不会!
- 关于WaitForMultipleObjects
- 关于“语法编辑器”的问题!!
- 简单的问题:double型和int型怎么转换成CString型?
- 怎样使一个组合框或按钮,在程序运行时设置可见不可见属性,或者可用不可用(显示为灰色)也行。
- 为什么我用create创建的控件长得和拖上去的不一样?
- Winsock问题:能不能推荐本好书啊!<Windows网络编程技术>太难,别的书?
- 如何打开关闭文档?
- Edit Box控件
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
a[i, j] = x;
1。其实这个问题类似排列组合问题
2. 当N=1时只要拿出一个数给它赋值
当N=2时每次拿出2个数,每次依次改变一个数到两个数(直到没有重复)并给它赋值也就是2^2=4
当N=3时每次拿出3个数,每次依次改变一个数。两个数、三个数(直到没有重复)并给它赋值也就是2^3=8
当N=4时每次拿出4个数,每次依次改变一个数。两个数、三个,四个数(直到没有重复)并给它赋值也就是2^4=16不识这样表述大家明白么?
char c[13];
a[n][m]
当n=1;m=2;
(1)c[1]=0x30+a[1][1];
(2)c[1]=0x30+a[1][2];当n=2;m=2
(1){c[1]=0x30+a[1][1],c[2]=0x30+a[2][1]};
(2)c[1]=0x30+a[1][1],c[2]=0x30+a[1][2]};
(3){c[1]=a[1][2],c[2]=a[2][1]};
(4){c[1]=a[1][2],c[2]=a[2][2]}当n=3;m=2
(1){c[1]=a[1][1],c[2]=a[2][1],c[3]=a[3]a[1]};(2){c[1]=a[1][1],c[2]=a[2][1],c[3]=a[3][2];}
(3){c[n]=a[1][1],c[n]=a[2][2],c[n]=a[3]a[1]};(4){c[n]=a[1][1],c[n]=a[2][2],c[n]=a[3][2];}
(5){c[n]=a[n][2],c[n]=a[n][1],c[n]=a[n]a[1]};(6){c[n]=a[n][2],c[n]=a[n][1],c[n]=a[n][2];}
(7){c[n]=a[n][2],c[n]=a[n][2],c[n]=a[n]a[2]};(8){c[n]=a[n][2],c[n]=a[n][2],c[n]=a[n][2];}当n=4;m=2;
...................
当n=5;m=2
.....................
这种算法谁能归纳一下
我可不想用穷举法
不要想象他是几维的数组,考虑成一队士兵X个排成一列,从中选出Y个士兵,要求这次选择的不能和以前的完全相同#define Y 10
#define X 2*Yint i, j;
int y[ Y ];
int x[ X ];for( i = 0; i < X; i++ )
x[ i ] = X;memset( y, 0, sizeof( int ) / sizeof( char ) );
i = 0;
while( y[ 0 ] < X )
{
y[ 1 ] = y[ 0 ] + 1;
while( y[ 1 ] < X )
{
//y[ 2 ] = y[ 1 ] + 1;
//...
y[ 1 ]++;
}
y[ 0 ]++;
}
http://expert.csdn.net/Expert/topic/1170/1170290.xml?temp=.9134027
A1,B1,C1
A2,B2,C2
从这六个数里拿出三个数如A1出局A2就不能出局这样有多少次组合呢
总体思路还是这样的,我给你把真正的高手都找来int i[ Y ];for( i[ 0 ] = 0; i[ 0 ] < X; i[ 0 ]++ )
for( i[ 1 ] = i[ 0 ] + 1; i[ 1 ] < X; i[ 1 ]++ )
...
for( i[ Y - 1 ] = i[ Y - 2 ] + 1; i[ Y - 1 ] < X; i[ Y - 1 ]++ )
{
printf( "%d", i[ 0 ] );
printf( "%d", i[ 1 ] );
...
printf( "%d", i[ Y - 1 ] );
}
A1,B1,C1
A2,B2,C2
从这六个数里拿出三个数如A1出局A2就不能出局这样有多少次组合呢
B1出局B2就不能出局
C1出局C2就不能出局
A1,B1,C1 / A1,B1,C2 / A1,B2,C1 / A1,B2,C2/
A2,B1,C1 /A2,B1,C2 / A2,B2,C1 /A2,B2,C2 /还可以看成现在有三个位子,3组学生,每组2个同学
每组只允许一个同学坐这位子,这样有多少种组合呢?
听兄台解释我才明白,等我想一想。
A2 B2 C2不就是 2*2*2=8吗?其他也是.
比如
A1 B1 C1 D1
A2 B2 C2 D2
A3 B3 C3 D3
就是 3*3*3*3=81种。
对你分析没错
这样写成算法呢!
//可以用一维数组来模拟多维数组。
//比如
//int a[2][2][2];
//你可以用 b[2*2*2]来代替,
//而使用的时候 a[1][0][1]就是b[1*2*2+0*2+1]//举例:M=每维下标 N=维数#define M 3
#define N 4long* pData; // data[3][3][3][3]#include <iostream>
#include <math.h>
//#include <stdio.h>
using namespace std;int main()
{
char str[100];
char strtemp1[100];
char strtemp2[100];
int len=pow(M,N);
pData=new long[len];
int i;
for(i=0;i<len;i++)pData[i]=i;//赋值
//显示
for(i=0;i<len;i++)
{
int j;
int temp=i;
strcpy(str,"");
strcpy(strtemp1,"");
strcpy(strtemp2,"");
for(j=0;j<N;j++)
{
itoa(temp%M,strtemp2,sizeof(strtemp2));
strcat(strtemp1,"[");
strcat(strtemp1,strtemp2);
strcat(strtemp1,"]");
temp/=M;
strcat(strtemp1,str);
strcpy(str,strtemp1);
strcpy(strtemp1,"");
}
strcpy(strtemp1,"\nData");
strcat(strtemp1,str);
cout<<strtemp1<<"="<<pData[i];//数值
}
cout<<endl;
return 0;
}运行结果
Data[0][0][0][0]=0
Data[0][0][0][1]=1
Data[0][0][0][2]=2
Data[0][0][1][0]=3
//省略
Data[2][2][2][0]=78
Data[2][2][2][1]=79
Data[2][2][2][2]=80
delete[] pData;
忘记了。
会导致内存泄露.
妙哉!谢谢!
http://expert.csdn.net/Expert/topic/1170/1170290.xml?temp=.9134027
其实我的解题思路和 iicup(双杯献酒)是一样的,但是我却陷于算法解题,所以始终找不到算法,而iicup(双杯献酒)却绕过了算法解题,他自己把题目解了,他所做的只是把答案列出来。
高实在是高,哈哈哈,很开心,我又学了一招,很懊恼我为什么就没想到呢?