蓝桥杯2016初赛 - 凑算式 - 全排列
题目链接
http://oj.ecustacm.cn/problem.php?id=1291
思路
答案是29。
我以为是九层循环直接暴力写……(PS:但是我发现暴力九层也是可以的,有人写,判重复的数字即可。)
原来是全排列,那也应该是,毕竟有九个不同的数。
利用题目给出的公式进行通分(通分之后得看下组成好之后是整体还是独立的数字再去进行组合,别弄错了),然后开一个数组存九个数,分别代表A-I,然后套进去公式就行。
注意:下标和数字和字母别写错了。
(全排列之前的公式有写,注意复习!)
AC代码
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#include<string.h>
using namespace std;
#define inf 0x3f3f3f3f
int main()
{
int a[10]= {1,2,3,4,5,6,7,8,9};
//九个数 A B C D E F G H I
//下标 0 1 2 3 4 5 6 7 8
int cnt=0;
do
{
int GHI=a[6]*100+a[7]*10+a[8];
int DEF=a[3]*100+a[4]*10+a[5];
if(a[0]*a[2]*GHI+a[1]*GHI+DEF*a[2]==10*a[2]*GHI)
cnt++;
}while(next_permutation(a,a+9)); // 注意:这里一定要写分号的
cout<<cnt<<endl;
return 0;
}