枚举算法_填运算符(5 5 5 5 5=5)(C语言)

5 5 5 5 5=5
求解其有多少种可能性?
例如:5+5-5*5/5=5
由于算术表达式地特殊性,在编程求解这个算式时,需要注意以下几点:

  1. 当填入除号时,要求右侧地数不能为0。
  2. 乘除地运算级别比加减高。

总体思路
对于这种问题需要用到枚举的思想,也就是遍历所有的符号分配方式,判断是否满足结果,若满足则视为一个合理的分配方案进行输出。

详细设计
♦ 我们所研究的对象是符号分配,所以要将注意力放在符号上,为了方便在后边判断符号添加的合理性,我们最好要有将符号存储在一个字符数组中的意识。且还需要一个数组用来存放符号数组中所有排列组合的下标集(0代表‘+’;1代表‘-’;2代表‘*’;3代表‘/’),然后对每一组进行循环排查。
♦除数不能是0 通过一个判断语句进行筛选,当下标大于3时下一个数不能是0。
♦优先级
设置俩个变量,一个负责加减,另一个负责乘除,最后进行合并。

C语言相关代码:

#include<stdio.h>
int main()
{
	int j,i[5]; //循环变量,数组i用来表示4个运算符 
	int sign;   //累加运算时地符号 
	int result;   //保存运算式的结果值 
	int count=0;   //计数器,统计符合条件的方案 
	int num[6];		//保存操作数 
	float left,right;  //保存中间结果 
	char oper[5]={' ','+','-','*','/'};  //运算符 
	printf("请输入5个数:"); 
	for(j=1;j<=5;j++)
	{
		scanf("%d",&num[j]);
	 } 
	 printf("请输入结果:"); 
	 scanf("%d",&result);
	 for(i[1]=1;i[1]<=4;i[1]++) //循环4种运算符,1表示+,2表示-,3表示*,4表示/ 
	 {
	 	if((i[1]<4)||(num[2]!=0)) //运算符若是/, 则第2个运算数 不能为0 
	 	{
	 		for(i[2]=1;i[2]<=4;i[2]++)
	 			{
	 				if((i[2]<4)||(num[3]!=0))
	 					{
	 						for(i[3]=1;i[3]<=4;i[3]++)
	                           {
	 								if((i[3]<4)||(num[4]!=0))
	 									{
	 										for(i[4]=1;i[4]<=4;i[4]++)
	                                           {
	 												if((i[4]<4)||(num[5]!=0))
	 													{
	 														left=0;
															right=num[1];
															sign=1;
															for(j=1;j<=4;j++)
															{
																switch(oper[i[j]])
																{
																	case '+':
																		left=left+sign*right;
																		sign=1;
																		right=num[j+1];
																		break;
																	case '-':
																		left=left+sign*right;
																		sign=-1;//符号位 
																		right=num[j+1];
																		break;
																	case '*':
																		right=right*num[j+1];
																		break;
																	case '/':
																		right=right/num[j+1];
																		break;
																}
															}
															if(left+sign*right==result)
															{
																count++;
																printf("%3d: ",count);
																for(j=1;j<=4;j++)
																	printf("%d%c",num[j],oper[i[j]]);
																printf("%d=%d\n",num[5],result);	
															 } 				
														 }
	                                           } 
		 								}
	                              } 
		 				}
	 			 } 
		 }
		 
	  }
	  if(count==0)
	  		printf("没有符合要求地方法!\n");
	  return 0; 
}
### 回答1: 华为C语言编程规范v5_1是华为公司为了统一C语言代码风格、提高代码质量而制定的一套规范。下面是关于该规范的一些要点: 1. 命名规则: - 变量、函数、宏等采用驼峰命名法,如"getMaxValue"; - 宏和常量全部大写,并使用下划线分隔,如"MAX_VALUE"; - 结构体和枚举类型使用首字母大写的驼峰命名法。 2. 编码规则: - 一个文件只包含一个功能模块,保持文件简洁; - 不使用全局变量,尽量使用局部变量; - 嵌套循环中及时退出,减少循环次数。 3. 注释规则: - 在代码片段前添加注释,解释代码功能; - 对复杂算法或特殊情况进行详细注释; - 注释必须与代码同步更新。 4. 错误处理: - 所有可能出错的地方都要进行错误处理; - 错误信息清晰明了,有助于定位问题; - 不要忽略错误返回值。 5. 内存管理: - 动态分配的内存要及时释放; - 避免内存泄漏和悬空指针。 6. 代码复用: - 避免重复代码,提取相同部分为函数或宏; - 提供合适的接口和模块,方便其他代码重用。 7. 关于编码风格: - 代码缩进4个空格,不使用制表符; - 每行代码不超过80个字符; - 函数之间空行分隔; - 运算符两侧加空格; - 使用括号来明确优先级和逻辑关系。 8. 其他规定: - 不使用不明确的预处理宏; - 禁止使用goto语句; - 不使用位域。 华为C语言编程规范v5_1的目的是规范华为公司的C语言代码,提高代码的可读性、可维护性和可靠性。遵循这些规范可以使得代码更加规范统一,减少错误和bug的产生,提高代码的质量和效率。 ### 回答2: 华为C语言编程规范v5_1是华为公司为了规范C语言程序设计而制定的一套规范。这套规范主要包含了C语言程序编写的规范、命名规范、注释规范、代码布局规范等内容。 在编写C语言程序时,规范要求代码风格应清晰明了、简洁易懂。命名规范要求采用驼峰命名法,并给出了一些命名规则的例子。注释规范要求对关键代码进行详细注释,以方便他人理解程序的逻辑和功能。代码布局规范要求使用空格、缩进等来使代码的结构更加清晰。 此外,规范中还对避免同名宏和全局变量的冲突、避免使用全局变量等进行了规定。规范还提出了一些代码书写的规则,如避免使用goto语句、避免在循环中使用浮点计算等。 通过遵守华为C语言编程规范v5_1,可以确保代码的可读性和可维护性。规范的制定旨在提高代码质量,降低代码维护的成本,让程序更加稳定和高效。 然而,需要注意的是,华为C语言编程规范v5_1是面向华为公司内部的,对于其他公司或个人来说,并不一定适用。因此,在使用这套规范时,需要根据自己的实际情况进行适度的调整和修改,以满足自己的编程需求。 ### 回答3: 华为C语言编程规范(Version 5.1)是华为公司针对C语言编程的一套规范和指南。下面以300字回答。 华为C语言编程规范是为了保证代码的质量和可维护性,统一团队内部的编程风格而制定的。规范主要包括以下几个方面: 1. 命名规范:规定了变量、函数、结构体等的命名方式,要求具有可读性和简洁性。变量名应该有意义,使用小写字母,多个单词之间用下划线分割。函数名应该使用动词开头,结构体名应该使用名词或名词短语。 2. 注释规范:规定了代码中注释的写法和规范。注释应该清晰明了,准确描述代码的功能和目的。在复杂的代码逻辑或算法时,应该详细解释。 3. 编码风格:规定了代码的缩进、对齐、空格等方面的风格。缩进一般使用四个空格,对齐使用空格而不是制表符,代码行的长度不宜过长。 4. 错误处理:规定了对于错误和异常情况的处理方式。对于可能发生错误的地方,应该添加适当的错误处理机制,如返回错误码或抛出异常。 5. 函数使用规范:规定了函数定义和使用的规范。函数应该尽量短小,功能单一,可读性强。函数的参数应该正确设置默认值,避免函数调用时产生歧义。 6. 内存管理:规定了内存的分配和释放方式。应该及时释放不再使用的内存,避免内存泄漏的问题。 遵守华为C语言编程规范可以提高代码的可读性、可维护性和可移植性,有利于团队协作和项目的顺利进行。通过规范约定统一的编程风格,有助于提高代码质量并减少潜在的错误和问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值