c语言子集和问题
#include<stdio.h>#defineN6intW[N];intM;voidsumofsub(ints,intk,intr){intx[N];x[k]=1;if...
#include <stdio.h>
#define N 6
int W[N];
int M;
void sumofsub(int s,int k,int r)
{
int x[N];
x[k]=1;
if(s+W[k]==M)
{
for(int i=0;i<N;i++)
printf("%3d",W[k]);
}
else
{
if(s+W[k]+W[k+1]<=M)
sumofsub(s+W[k],k+1,r-W[k]);
if(s+r-W[k]>=M&&s+W[k+1]<=M)
{
x[k]=0;
sumofsub(s,k+1,r-W[k]);
}
}
}
void main()
{
int i,r0=0;
int s0=0;
int k0=0;
printf("Please input an array of %d integer(ASC):\n",N);
for(i=0;i<N;i++)
{
scanf("%d",&W[i]);
}
printf("The array you input is: ");
for(i=0;i<N;i++)
{
printf("%3d",W[i]);
}
for(i=0;i<N;i++)
{
r0+=W[i];
}
printf("\n");
printf("Plese input the sum you like:");
scanf("%d",&M);
printf("\n");
printf("The sumofsub you want is:\n");
sumofsub(s0,k0,r0);
printf("\n");
}
运行后的输出结果 不对 大家帮帮忙
就是输入一个非降序的整形数组,自己定义一个整形数值,例如
数组为:5,10,12,13,15,18 定义的M=30 输出数组中加起来刚好等于30 的数字 展开
#define N 6
int W[N];
int M;
void sumofsub(int s,int k,int r)
{
int x[N];
x[k]=1;
if(s+W[k]==M)
{
for(int i=0;i<N;i++)
printf("%3d",W[k]);
}
else
{
if(s+W[k]+W[k+1]<=M)
sumofsub(s+W[k],k+1,r-W[k]);
if(s+r-W[k]>=M&&s+W[k+1]<=M)
{
x[k]=0;
sumofsub(s,k+1,r-W[k]);
}
}
}
void main()
{
int i,r0=0;
int s0=0;
int k0=0;
printf("Please input an array of %d integer(ASC):\n",N);
for(i=0;i<N;i++)
{
scanf("%d",&W[i]);
}
printf("The array you input is: ");
for(i=0;i<N;i++)
{
printf("%3d",W[i]);
}
for(i=0;i<N;i++)
{
r0+=W[i];
}
printf("\n");
printf("Plese input the sum you like:");
scanf("%d",&M);
printf("\n");
printf("The sumofsub you want is:\n");
sumofsub(s0,k0,r0);
printf("\n");
}
运行后的输出结果 不对 大家帮帮忙
就是输入一个非降序的整形数组,自己定义一个整形数值,例如
数组为:5,10,12,13,15,18 定义的M=30 输出数组中加起来刚好等于30 的数字 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询