1332: [蓝桥杯2017初赛]算式900 【简单】 有点意思

在这里插入图片描述
http://oj.ecustacm.cn/problem.php?id=1332

最简单的方法: 直接暴力

#include<cstdio>
int main(void)
{
	int a[10];
	int n;
	int sum1,sum2;
	for(a[0]=0;a[0]<=9;a[0]++)
	{
		for(a[1]=0;a[1]<=9;a[1]++)
		{
			for(a[2]=0;a[2]<=9;a[2]++)
			{
				for(a[3]=0;a[3]<=9;a[3]++)
				{
					for(a[4]=0;a[4]<=9;a[4]++)
					{
						for(a[5]=0;a[5]<=9;a[5]++)
						{
							for(a[6]=0;a[6]<=9;a[6]++)
							{
								for(a[7]=0;a[7]<=9;a[7]++)
								{
									for(a[8]=0;a[8]<=9;a[8]++)
									{
										for(a[9]=0;a[9]<=9;a[9]++)
										{
											bool b[10]={false};
										    int n=0;
											for(int i=0;i<10;i++)
											{
												b[a[i]]=true;
											}
											for(int i=0;i<10;i++)
											{
												if(b[i]==true)
													n++;
											}
											if(n==10)
											{
												sum1=a[0]*1000+a[1]*100+a[2]*10+a[3];
												sum2=a[4]*1000+a[5]*100+a[6]*10+a[7];
												int sum3=sum1-sum2;
												if(sum3*(a[8]*10+a[9])==900)
												{
													printf("(%d%d%d%d-%d%d%d%d)*(%d%d)=900\n",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	return 0;
}

在这里插入图片描述上面的这种写法太冗杂了,那么来一个简单点的。
其实,本题是一个全排列问题。找出满足题目要求的排列就行了。
我们知道在库里有一个现成的求全排列的函数,直接调用就可以了。
这种方法的时间和代码量都比上面的优秀许多。

#include<cstdio>
#include<iostream>
#include<algorithm> 
using namespace std;
int main(void)
{
	int sum1;
	int sum2;
	int sum3;
	int a[10]={0,1,2,3,4,5,6,7,8,9};
	do
	{
		sum1=a[0]*1000+a[1]*100+a[2]*10+a[3];
		sum2=a[4]*1000+a[5]*100+a[6]*10+a[7];
		sum1=sum1-sum2;
		sum2=a[8]*10+a[9];
		if(sum1*sum2==900)
		{
			for(int i=0;i<10;i++)
			{
				printf("%d ",a[i]);
			}
			printf("\n");
		}
	}while(next_permutation(a,a+10));
	return 0;
} 

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值