关于字符串组合方法-2 char ** str=new char [n*m][MAX_LENG];int i=0;for(int n=0;n<N;n++) for (int m=0;m<M;m++){} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 char str[N*M][MAX_LENG];int i=0;for(int n=0;n<N;n++) for (int m=0;m<M;m++){ sprintf(str[i++],"str%02d%02d",n,m);} 结果是str0000str0001str0002str0100str0101str0102str0200str0201str0202str0300str0301str0302 Kevin_qing先生,我要的不一定是两个数组的组合,这是个标准的数学上的组合问题,Thank you 下面这个总可以吧:#include <stdio.h>// N个数的全排列:typedef void (*MyOutputFunc)(int numb, char out[]);void Iterate(int n, char in[], char out[], int nmax, int& numb, MyOutputFunc f){ if( n == 0 ) { f(numb++, out); return; } for(int i = 0; i < nmax; i++) { if( in[i] != -1 ) { out[nmax-n] = in[i]; in[i] = -1; Iterate(n-1, in, out, nmax, numb, f); in[i] = out[nmax-n]; } }}void PrintP(int numb, char out[]){ printf("[%08d]: %s\n", numb, out);}#define MAX 62main(){ char in[MAX+1], out[MAX+1]; int numb = 0; for( int i = 0; i < MAX; i++ ) { if( i < 26 ) in[i] = 'a'+i; else if( i < 52 ) in[i] = 'A'+i-26; else in[i] = '0'+i-52; out[i] = -1; } in[i] = out[i] = 0; Iterate(MAX, in, out, MAX, numb, PrintP); printf("\nAll items are %d\n", numb); return 0;} 我明白了,这是我的方法:nTotal = 1;for(i = 0;i<n;i++){ nTotal = nTotal * m[i];}mCount[0] = 1;for(i=1;i<nUseTimes;i++){ mCount[i] = m[i-1] * mCount[i-1];} int nMod;String[] sCombo = new String[nTotal][nUseTimes];for(i = 0;i < nTotal;i ++){ for(j=0;j<nUseTimes;j++){ nMod = (i / mCount[j]) % nCount[j]; sCombo[i][j] = sTimeLists[j][nMod]; }} mfc 数据显示形式以线形图或者轴状图来显示 标题栏自绘之后,拖动窗口还能看见之间标题//要怎么处理? 如何实现 c=a 转为c = "a" ,谢谢。 请问,我在程序里调用了一个CmdLine的程序,如何获得原本输出到console中的文字? 什么时候涨到三个三角啊 MSN 更换显示图片的问题? 如何将半角单词转化成全角? 如和以曲线的形式动态的显示事实采集的数据?我很急,分不是问题,谢谢了,我可以在加分 各位打扰一下,问个简单问题 如何查找依赖的ACTIVEX部件? PHP与ASP那个好点? 发布ODBC程序时,如何建立ODBC Data Source?
int i=0;
for(int n=0;n<N;n++)
for (int m=0;m<M;m++)
{
sprintf(str[i++],"str%02d%02d",n,m);
} 结果是
str0000
str0001
str0002
str0100
str0101
str0102
str0200
str0201
str0202
str0300
str0301
str0302
这是个标准的数学上的组合问题,Thank you
#include <stdio.h>
// N个数的全排列:typedef void (*MyOutputFunc)(int numb, char out[]);void Iterate(int n, char in[], char out[], int nmax, int& numb, MyOutputFunc f)
{
if( n == 0 )
{
f(numb++, out);
return;
}
for(int i = 0; i < nmax; i++)
{
if( in[i] != -1 )
{
out[nmax-n] = in[i];
in[i] = -1;
Iterate(n-1, in, out, nmax, numb, f);
in[i] = out[nmax-n];
}
}
}void PrintP(int numb, char out[])
{
printf("[%08d]: %s\n", numb, out);
}#define MAX 62
main()
{
char in[MAX+1], out[MAX+1];
int numb = 0;
for( int i = 0; i < MAX; i++ )
{
if( i < 26 ) in[i] = 'a'+i;
else if( i < 52 ) in[i] = 'A'+i-26;
else in[i] = '0'+i-52;
out[i] = -1;
}
in[i] = out[i] = 0;
Iterate(MAX, in, out, MAX, numb, PrintP);
printf("\nAll items are %d\n", numb);
return 0;
}
nTotal = 1;
for(i = 0;i<n;i++){
nTotal = nTotal * m[i];
}mCount[0] = 1;
for(i=1;i<nUseTimes;i++){
mCount[i] = m[i-1] * mCount[i-1];
} int nMod;
String[] sCombo = new String[nTotal][nUseTimes];
for(i = 0;i < nTotal;i ++){
for(j=0;j<nUseTimes;j++){
nMod = (i / mCount[j]) % nCount[j];
sCombo[i][j] = sTimeLists[j][nMod];
}
}