蓝桥杯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;
}