问题 1440: [蓝桥杯][2013年第四届真题]带分数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyxeainn/article/details/79961860

点击查看题目


暴力:求1~9的全排列。

对于每一个全排列,我们把全排列中的数分成3堆且每堆都不为空,则1~9中间有8个间隔。采取隔板法,8个间隔分

三堆有C(8,2)种方法。对于每个全排列,枚举这些分割方法,求出三个数。然后按照题目公式计算看是否等于数字N。


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

int main() {
    int n;
    while(~scanf("%d",&n)) {
        int a[] = {1,2,3,4,5,6,7,8,9};
        int ans = 0;
        do {
            int num1,num2,num3;
            //第一段[0,i-1],第二段[i,j],第三段[j+1,8]
            for(int i = 1; i < 8; i++) {
                for(int j = i; j < 8; j++) {
                    num1=0;
                    num2=0;
                    num3=0;
                    for(int k = 0; k < i; k++) {
                        num1 = num1*10 + a[k];
                    }
                    for(int k = i; k <= j; k++) {
                        num2 = num2*10 + a[k];
                    }
                    for(int k = j+1; k <= 8; k++) {
                        num3 = num3*10 + a[k];
                    }
                    if(num2%num3==0) {
                        if(num2/num3 + num1 == n) {
                            ans++;
                        }
                    }
                }
            }
        }while(next_permutation(a,a+9));
        printf("%d\n",ans);
    }
    return 0;
}



阅读更多

没有更多推荐了,返回首页