组合问题 之 函数的NULL参数

题目:

输出某函数形式 例如 Fun(str1,str2,str3...)

输出其参数为NULL的各种情形

sample: input Add(tom,lily,andrew)

output : 

Add(tom,lily,NULL)

Add(tom,NULL,andrew)

Add(NULL,lily,andrew)

Add(tom,NULL,NULL)

Add(NULL,lily,NULL)

Add(NULL,NULL,NULL)


纯C语言代码:

#include <string.h>
#include <stdio.h>
#define N 100

int a[N]={0},end=0;
void out(const char *buf)
{
	const char *pbuf = buf;
	char *pstart = strstr(buf,"(");
	char *pend = strstr(buf,")");
	while(pbuf<=pstart) //起头
	{
		printf("%c",*pbuf);
		pbuf++;
	}

	for(int i=1;i<N;i++) //每一次排列完成 a[0]-a[1]-a[2]...都是原样输出的
	{
		if(a[i]<=a[i-1]) //收尾
		{
			while(pbuf!=pend) //输出a[i-1]到末尾的数
			{
				printf("%c",*pbuf);
				pbuf++;
			}
			printf(")\n");
			return;
		}
	

		for(int j=a[i-1]+1;j<a[i]; )
		{
			printf("%c",*pbuf);
			if(*pbuf==',')
			{
				j++;
				pbuf++;
				continue;
			}
			pbuf++;
		}
		printf("NULL"); //替换
		if (strstr(pbuf,",")) //指向下一个参数 第a[i]+1个
		{
			pbuf = strstr(pbuf,",");
			pbuf++;
			printf(",");
		}
		else //后面没有参数了,收尾
		{
			printf(")\n");
			return;
		}
	}
}

void comb(int m,int k,const char *buf)//从m个元素中取出k个元素的组合//换成全部输出
{
	int i,j;
	for(i=m;i>=k;i--)
	{
		a[k]=i;
		if(k>1) 
			comb(i-1,k-1,buf);
		else
		{
			for(j=1;j<=end;j++)
			{
				printf("%d ",a[j]);
			}
			printf("\n");
			out(buf);
			printf("\n");
		}
	}
}

int main()
{

	char *str="Test(a,b,544,esd)";


	char *pstr=str;
	int n=1;
	while(*pstr)
		if(*pstr++==',')
			n++;

	for (int i=1;i<=n;i++)
	{
		end=i;
		comb(n,i,str);
	}
	return 0;
}


#include <stdio.h>
unsigned int g_flag=0;
int TOTAL=5;

void printflag_()
{
	for(int x=TOTAL-1;x>=0;x--)
		printf("%d",((g_flag>>x)&1));
};

void comb_(int total,int part)
{
	for(int i=total;i>=part;i--)
	{
		g_flag |= 1<<(i-1); //该位置标记1
		for (int x=0;x<total-i;x++) //该位置以前到该递归起始位置 标记0;
			g_flag &= ~(1<<(total-x-1));
		for (int y=1;y<i;y++) //该位置以后全部标记0;
			g_flag &= (-1)<<y;

		if ( part>1 )
		{
			comb_(i-1,part-1);
		}
		else
		{
			printflag_();
			printf("\n");
		}
	}
};

void comb(int total,int part)
{
	TOTAL=total;
	comb_(total,part);
}
int main()
{
	comb(5,2);
	printf("\n");
	comb(6,2);
	return 0;
}




修改构造函数参数通常涉及到对类的设计进行调整,因为你不能直接改变已经存在的构造函数。如果你发现需要添加、移除或者更改现有参数,可以按照以下步骤操作: 1. **添加新参数**:如果需要增加新的输入属性,可以在已有构造函数的基础上创建一个新的构造函数,把新增参数放在最前面,并提供默认值(若有必要)。例如: ```java class MyClass { String name; int age; // 如果name和age都需要作为参数,可以这样: MyClass(String name, int age) { this.name = name; this.age = age; } // 或者,如果只希望在一个构造函数里接受更多参数: MyClass(String newName, int newAge, boolean flag) { this(newName, newAge); this.flag = flag; } } ``` 2. **合并参数**:如果两个或更多的参数组合成一个,可以考虑将它们合并到一个复合结构(如`Pair`、`Optional`等)中,然后作为单个参数接收。 3. **移除参数**:如果你确定不需要某个参数了,可以选择保留无参构造函数(如果有的话),并在其他构造函数中排除它。另外,也可以在已有构造函数中设置一个默认值为null,然后在需要使用该参数的地方检查是否为null。 4. **重构**:当构造函数过于复杂时,可以考虑将其拆分为多个专门处理特定功能的小构造函数,再通过组合(如工厂模式)来创建实例。 记住,每次修改构造函数都应谨慎考虑,确保不会破坏已有的代码库和API稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值