重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includestdio.h
创新互联是一家专业提供崇州企业网站建设,专注与网站设计制作、成都网站制作、H5场景定制、小程序制作等业务。10年已为崇州众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
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]);
}
这题目有点意思,本人这两天研究了一下,针对char类型写了一个小程序,测试成功。大概思路是这样的:要做Cmn的组合,可以用一个有n个元素的指针数组,数组中的元素分别指向给定集合中的n个元素,每次取出这些指针所指的值,再按照一定的规律移动指针,如此循环直至结束。下面附上函数源代码及注释,希望对你有所帮助,至于char以外的其它集合,你也不妨试着写写。
void fun(char *strSrc,char *strDes,int n) //strSrc是源数组,strDes是目标数组,n为要选取的个数
{
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++) //初始时n个指针分别指向前n个数据
pp[i]=pSrc++;
while(1)
{
for(i=0;in;i++) //取当前组合数据赋给目标字符串
*pDes++=*pp[i];
*pDes++=' '; //为了看上去方便而加的分隔符
if(flag==1) //若完成则退出
{
*pDes='\0';
break;
}
if( *(pp[n-1]+1)!='\0' ) //若一组中最后一个指针还没有指向源字符串中最后一个数据
pp[n-1]++;
else
{
for(j=n-1;j0;j--) //从后往前寻找应该移动的指针
{
if(pp[j-1]+1!=pp[j]) //找到指针pp[j-1]
{
//如果该指针为第一个,并且与第二个只隔一个位置,说明下一组为最后一组
if((j-1==0)(pp[j-1]+2==pp[j]))
{
pp[j-1]++;
flag = 1;
}
else //否则将找到的指针及其后面的所有指针移动到新位置
{
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;}