#includestdio.h
創(chuàng)新互聯(lián)是一家專業(yè)提供崇州企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、H5場(chǎng)景定制、小程序制作等業(yè)務(wù)。10年已為崇州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
void OddArray (int a[],int b[])
{
int i;
for(i=0;i11;i++)
{
if(i%2==0)
b[i/2]=a[i];
}
}
main()
{
int a[]={1,2,3,4,5,6,7,8,9,10,11},b[6],i;
OddArray(a,b);
for(i=0;i6;i++)
printf("%-5d",b[i]);
}
這題目有點(diǎn)意思,本人這兩天研究了一下,針對(duì)char類型寫了一個(gè)小程序,測(cè)試成功。大概思路是這樣的:要做Cmn的組合,可以用一個(gè)有n個(gè)元素的指針數(shù)組,數(shù)組中的元素分別指向給定集合中的n個(gè)元素,每次取出這些指針?biāo)傅闹?,再按照一定的?guī)律移動(dòng)指針,如此循環(huán)直至結(jié)束。下面附上函數(shù)源代碼及注釋,希望對(duì)你有所幫助,至于char以外的其它集合,你也不妨試著寫寫。
void fun(char *strSrc,char *strDes,int n) //strSrc是源數(shù)組,strDes是目標(biāo)數(shù)組,n為要選取的個(gè)數(shù)
{
int i,j,k,len,flag;
char **pp;
char *pSrc,*pDes;
flag=0;
len=strlen(strSrc);
if(nlen)
return;
pSrc=strSrc;
pDes=strDes;
pp=new char*[n];
for(i=0;in;i++) //初始時(shí)n個(gè)指針分別指向前n個(gè)數(shù)據(jù)
pp[i]=pSrc++;
while(1)
{
for(i=0;in;i++) //取當(dāng)前組合數(shù)據(jù)賦給目標(biāo)字符串
*pDes++=*pp[i];
*pDes++=' '; //為了看上去方便而加的分隔符
if(flag==1) //若完成則退出
{
*pDes='\0';
break;
}
if( *(pp[n-1]+1)!='\0' ) //若一組中最后一個(gè)指針還沒有指向源字符串中最后一個(gè)數(shù)據(jù)
pp[n-1]++;
else
{
for(j=n-1;j0;j--) //從后往前尋找應(yīng)該移動(dòng)的指針
{
if(pp[j-1]+1!=pp[j]) //找到指針pp[j-1]
{
//如果該指針為第一個(gè),并且與第二個(gè)只隔一個(gè)位置,說明下一組為最后一組
if((j-1==0)(pp[j-1]+2==pp[j]))
{
pp[j-1]++;
flag = 1;
}
else //否則將找到的指針及其后面的所有指針移動(dòng)到新位置
{
pp[j-1]++;
for(k=j;kn;k++)
pp[k] = pp[k-1]+1;
}
break;
}
}
}
}
for(i=0;in;i++)
pp[i]=NULL;
delete []pp;
}
#includestdio.h
int c(int n,int m){
int i,s=1;
for(i=m;i=m-n+1;i--)s*=i;
for(i=n;i=2;i--)s/=i;
return s;}
int f(int k,int m,int n){
int i,s=0;
for(i=k;i=k+n;i++)s+=c(i,m);
return s;}
int main(){
int k,m,n;
printf("輸入k,m,n\n");
scanf("%d%d%d",k,m,n);
printf("%d",f(k,m,n));
return 0;}