您现在的位置是:主页 > news > 六安 网站建设/百度指数热度榜

六安 网站建设/百度指数热度榜

admin2025/5/2 20:09:57news

简介六安 网站建设,百度指数热度榜,石油网站编辑怎么做,网站为什么要挂服务器思路&#xff1a; 1.暴力枚举出99个数的全排列&#xff0c;然后用一个长度为99的数组保存全排列的结果 2.从全排列的结果中用两重循环暴力分解出三段&#xff0c;每段代表一个数 3.验证枚举出来的三个数是否满足题干条件&#xff0c;若满足则计数 #include <iostream> …

六安 网站建设,百度指数热度榜,石油网站编辑怎么做,网站为什么要挂服务器思路&#xff1a; 1.暴力枚举出99个数的全排列&#xff0c;然后用一个长度为99的数组保存全排列的结果 2.从全排列的结果中用两重循环暴力分解出三段&#xff0c;每段代表一个数 3.验证枚举出来的三个数是否满足题干条件&#xff0c;若满足则计数 #include <iostream> …

 

思路:

1.暴力枚举出99个数的全排列,然后用一个长度为99的数组保存全排列的结果
2.从全排列的结果中用两重循环暴力分解出三段,每段代表一个数
3.验证枚举出来的三个数是否满足题干条件,若满足则计数

#include <iostream>
#include <cstring>
using namespace std;
int visit[11];	//判重
int a[11];		//记录之间值
int n;			
int res;
int cal(int l, int r)
{//计算a[l..r]变成一个数字的值int ans = 0;for (int i = l;i < r;i++){ans = ans * 10 + a[i];}return ans;
}
void dfs(int len)
{if(len==9){ for (int i = 1;i <= 7;i++)	//第一个中断点枚举到7,因为后面要留2元素{int a = cal(0, i);		//从0到第一个中断点的值for (int j = i + 1;j < 9;j++)	//枚举第二个中断点{int b = cal(i, j);int c = cal(j, 9);if (a * c + b == n * c)		//由于b/c是整除,需要转换成这种形式,同乘以cres++;}}}for (int i = 1;i <= 9;i++) if (!visit[i]){visit[i] = 1;a[len] = i;dfs(len + 1);a[len] = 0;visit[i] = 0;}
}
int main()
{cin >> n;dfs(0);cout << res;
}