求解一个组和的问题 用递归程序做吧,应该不是很难的,实在搞不定的话,给我发封mail,我帮你做做看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 int i,j,k,d;for(i=0;i<0x40;i++){ k=0; d=i; for(j=0;j<5;j++) { if(d%2==1) k++; d=d/2; } if(k==3) { d=i; for(j=0;j<5;j++) { if(d%2==1) printf("%d ",d); d=d/2; } printf("\n"); }} void comb(int n,int r,int a[m]){int j,ri; ri=1;a[1]=n; do{ if(ri!=r) if(ri+a[ri]>r){ a[ri+1]=a[ri]-1; ri++;} else{ ri--; a[ri]--;} else{ for(j=1;j<=t;j++) cout<<a[j]; cout<<"\n"; if(a[r]==1){ ri--; a[ri]--;} else a[ri]--;} }while(a[1]!=r-1); } //刚刚看错题了,下面void fun(int n,int m,int* list){ int i,j,k,b=1; int p[100]; for(i=0;i<=m;i++){ p[i]=i; } while(b){ for(i=1;i<=m;i++) printf("%d ",list[p[i]-1]); printf("\n"); if(p[1]==n-m+1)//是否结束 break; if(p[m]<n)//产生一组数据 { p[m]++; continue; } for(j=m-1;j>0;j--)//回溯 { if(p[j]!=p[j+1]-1) { p[j]++; for(k=j+1;k<=m;k++) p[k]=p[k-1]+1; break; } } }} int Data[100];void Combination(int Start,int MaxM,int MaxN){ int i; if(Start == MaxN) { SaveDat(MaxN); return ; } for(i=0;i<MaxM;i++) { Data[Start] = i; Combination(Start+1,MaxM,MaxN); } return ;}调用时用Combination(0,5,3) 没看清楚,void CMyArithmetic::MyCombination(int Current, int MaxM, int MaxN){ bool bSame; if(Current == MaxN) { SaveIntArray(MaxN);//打印出整个数组 m_Count++; return ; } for(int i=0;i<MaxM;i++) { bSame = false; for(int j=0;j<Current;j++) if(m_DataIntArray[j] >= i) { bSame = true; break; } if(!bSame) { m_DataIntArray[Current] = i; MyCombination(Current+1,MaxM,MaxN); } }}调用时用MyCombination(0,5,3) ctabctrl标签页 互相通信 如何取得ESP的值 一段代码 内嵌activex控件捕获网页的移动事件 为什么我用socket编写的客户端要等待很长时间才收到返回消息?(附代码) 求OpenGL的标准API及辅助API的参考手册 为什么窗口从最小化恢复时候,别的窗口无法接受到WM_KILLFOCUS? 用过jpeglib的先生小姐来看看怎么解决这个问题? *** 超级难题2个---系统方面的, 你会不会?*** 高分求助---异常的捕获!!!!!! 那个整蛊播放器是哪个蠢才的东西啊? 请问如何为对话框加载菜单?(是基于对话框的MFC)。
for(i=0;i<0x40;i++)
{
k=0;
d=i;
for(j=0;j<5;j++)
{
if(d%2==1)
k++;
d=d/2;
}
if(k==3)
{
d=i;
for(j=0;j<5;j++)
{
if(d%2==1)
printf("%d ",d);
d=d/2;
}
printf("\n");
}
}
{int j,ri;
ri=1;a[1]=n;
do{
if(ri!=r)
if(ri+a[ri]>r){
a[ri+1]=a[ri]-1;
ri++;}
else{
ri--;
a[ri]--;}
else{
for(j=1;j<=t;j++)
cout<<a[j];
cout<<"\n";
if(a[r]==1){
ri--;
a[ri]--;}
else
a[ri]--;}
}while(a[1]!=r-1);
}
void fun(int n,int m,int* list)
{ int i,j,k,b=1;
int p[100];
for(i=0;i<=m;i++){
p[i]=i;
}
while(b){
for(i=1;i<=m;i++)
printf("%d ",list[p[i]-1]);
printf("\n");
if(p[1]==n-m+1)//是否结束
break;
if(p[m]<n)//产生一组数据
{ p[m]++;
continue;
}
for(j=m-1;j>0;j--)//回溯
{ if(p[j]!=p[j+1]-1)
{ p[j]++;
for(k=j+1;k<=m;k++)
p[k]=p[k-1]+1;
break;
}
}
}
}
int Data[100];void Combination(int Start,int MaxM,int MaxN)
{
int i;
if(Start == MaxN)
{
SaveDat(MaxN);
return ;
}
for(i=0;i<MaxM;i++)
{
Data[Start] = i;
Combination(Start+1,MaxM,MaxN);
}
return ;
}
调用时用Combination(0,5,3)
void CMyArithmetic::MyCombination(int Current, int MaxM, int MaxN)
{
bool bSame;
if(Current == MaxN)
{
SaveIntArray(MaxN);//打印出整个数组
m_Count++;
return ;
}
for(int i=0;i<MaxM;i++)
{
bSame = false;
for(int j=0;j<Current;j++)
if(m_DataIntArray[j] >= i)
{
bSame = true;
break;
}
if(!bSame)
{
m_DataIntArray[Current] = i;
MyCombination(Current+1,MaxM,MaxN);
}
}
}
调用时用MyCombination(0,5,3)