暴力的例题。
大体思路:
枚举出fghij这个数,之后计算fghij * x (2 < x < 80) 判断得到的数是不是满足条件
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define LEN 80
#define MAXD 100
int array[LEN][MAXD]= {0};
int num[LEN] = {0};
void biao(){
for(int i = 1234; i <= 98765 ; i++){
int n = i;
int ok = 1;
int vis[10] = {0};
for(int j = 0; j < 5; j ++){ /*先判断各个位是否重复*/
int t = n % 10;
if(!vis[t]){
vis[t] = 1;
n = n / 10;
}
else if(vis[t]){
ok = 0;
break;
}
}
if(ok){
for(int j = 2 ; i * j <= 98765 ; j++){
int temp = i * j;
int _vis[10];
int _ok = 1;
memcpy(_vis,vis,sizeof(_vis));
for(int k = 0 ; k < 5 ; k++){
int t = temp % 10;
if(!_vis[t]){
_vis[t] = 1;
temp = temp / 10;
}
else if(_vis[t]){
_ok = 0;
break;
}
}
if(_ok) {
array[j][num[j]++] = i * j;
}
}
}
}
}
int main(){
biao();
int n;
int Case = 0;
while(scanf("%d",&n) && n){
if(Case > 0)
printf("\n");
Case++;
if(num[n]){
for(int i = 0 ; i < num[n] ; i++)
printf("%05d / %05d = %d\n",array[n][i],array[n][i] / n,n);
}
else
printf("There are no solutions for %d.\n",n);
}
return 0;
}
本文介绍了一种通过暴力枚举方法解决特定数学问题的算法实现。该算法首先枚举五位数fghij,确保各位数字不重复,然后通过乘以2到80之间的整数来检查结果是否符合特定条件。使用C++实现,展示了如何存储和输出符合条件的所有解。
526

被折叠的 条评论
为什么被折叠?



