zoukankan      html  css  js  c++  java
  • 蓝桥杯 PREV-3 带分数(dfs)

    题目链接:

    PREV-3 带分数

    思路:

    根据题意我们需要找到满足(nx)=z/y(n - x) = z / y(x,y,z)(x, y, z)三元组解的个数,且x,y,zx,y,z中所有数字不相同且刚好是1199的一个排列;
    1.我们需要知道xx的位数不能超过nn(一个数xx的位数可以用lg(x)+1lg(x)+1计算得出)
    2.zz的位数大于等于yy的位数;
    然后我们依次搜索1199的全部排列,对于每一种排列,我们依次取x,y,zx,y,z的可能位数、从而得到相应数值,带进等式进行计算,如果相等答案加一即可;

    代码:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int n, cnt, a[15];
    bool vst[15];
    
    inline int f(int p, int len) { 
    	int rs = 0;
    	while(len--) rs = rs * 10 + a[p++];
    	return rs;
    }
    inline void check() {
    	for(int i = log10(n) + 1; i; i--) {
    		int x = f(1, i);
    		for(int j = (9 - i) >> 1; j; j--) {
    			int y = f(1 + i, j), z = f(1 + i + j, 9 - i -j);
    			if((n - x) * y == z) ++cnt;	
    		}
    	}
    }
    void dfs(int p) {
    	if(p == 10) { check(); return; }
    	for(int i = 1; i < 10; i++) {
    		if(!vst[i]) a[p] = i, vst[i] = 1, dfs(p + 1), vst[i] = 0;
    	}
    }
    
    int main() {
    #ifdef MyTest
    	freopen("Sakura.txt", "r", stdin);
    #endif
    	cin >> n;
    	dfs(1);
    	cout << cnt;
    	return 0;
    }
    
  • 相关阅读:
    JS 中 this 关键字详解
    Excel 文本函数
    Excel 日期和时间函数
    Excel引用和数学函数
    Excel-查找函数
    Excel-统计函数
    数据分析-业务知识
    Excel-逻辑函数
    Excel-基本操作
    电商数据分析总结
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308620.html
Copyright © 2011-2022 走看看