自己写的华为机试题目,只要思路对,编码迟早的


</pre>等式变换描述: &nbsp; &nbsp;输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。1 2 3 4 5 6 7 8 9 = X比如:12-34+5-67+89 = 51+23+4-5+6-7-8-9 = 5请编写程序,统计满足该输入整数的所有等式的个数。运行时间限制: &nbsp; &nbsp;无限制内存限制: &nbsp; &nbsp;无限制输入: &nbsp; &nbsp;正整数,等式右边的数字输出: &nbsp; &nbsp;使该等式成立的个数样例输入: &nbsp; &nbsp;5<p>样例输出: &nbsp; &nbsp;21</p><p><pre name="code" class="cpp">#include<iostream>
using namespace std;

int num[9];
int symbol[8];
int k=5;
 int ct=0;

bool Sum(int num[9],int k)
{
	int i=0;
	int sum=0;
	int add=0; 
	
	int num1[9];//存放供计算的数值
	int symbol1[8];//存放符号
	

	int j=0;
	num1[j]=num[i];//首先让1进入num1中
	
	for(  i=0;i<8;i++)
	{
		if (3!=symbol[i])   //不是合并符号
		{
			symbol1[j]=symbol[i];
			
					j++;
				num1[j]=num[i+1];
			
		}
		else if(3==symbol[i])//合并整数
		{
					num1[j]=num1[j]*10+num[i+1];
			        add++;//计算合并符号
		
		}
		 
	}

	sum=num1[0];
	int length;
	length=(sizeof(symbol)/sizeof(symbol[0])-add);
	for(i=0;i<length;i++)
		if(symbol1[i]==1)
			sum=sum+num1[i+1];
		else
		{
			sum=sum-num1[i+1];
		}

		return sum==k;

}

void SetSymbol(int n)
{
	
	int k1,k2,k3,k4,k5,k6,k7,k8;
	for(k1=1;k1<=3;k1++)
	{
		symbol[n]=k1;
		for (k2=1;k2<=3;k2++)
		{
			symbol[n+1]=k2;
			for (k3=1;k3<4;k3++)
			{
				symbol[n+2]=k3;
				for (k4=1;k4<4;k4++)
				{
					symbol[n+3]=k4;
					for (k5=1;k5<4;k5++)
					{
						symbol[n+4]=k5;
						for (k6=1;k6<4;k6++)
						{
							symbol[n+5]=k6;
							for (k7=1;k7<4;k7++)
							{
								symbol[n+6]=k7;
								for (k8=1;k8<4;k8++)
								{
									symbol[n+7]=k8;
									if(Sum(num,k))
									{
										ct++;
										cout<<"第"<<ct<<"种"<<endl;
										for(int i=0;i<8;i++)
											{
												cout<<num[i];
												if(1==symbol[i])
													cout<<"+";
												else if(2==symbol[i])
													cout<<"-";
										
										    }

										cout<<num[8]<<"="<<k<<endl;
										
									}
								}
								
							}
						}
						
					}
					
				}
				
			}
			
		}
		
	}
}

int main()
	{
		int i;

		for(i=0;i<9;i++)
			num[i]=i+1;
		SetSymbol(0);

		return 1;

	}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值