58,451
社区成员




#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int Max = 9;
int ca,s,cnt,ri;
int flag[Max + 1];
int bak[Max + 1];
int check(int l){ //标记已有的位,检查数字是否符合规则
int length = 0;
while(l){
if(flag[l%10])return 0;
flag[l%10] = 1;
l /= 10;
length ++;
}
s = Max - length;
return 1;
}
int checks(int n){
int length = 0;
memcpy(bak,flag,sizeof(bak));
while(n){
if(bak[n%10])return 0;
bak[n%10] = 1;
n /= 10;
length ++;
}
return length;
}
void dfs(int depth,int v){ //通过剩余数字构造分子,并且验证分母
if(depth <= s / 2){
if(checks(v * ri) == s - depth){
printf("%d = %d + %d/%d\n",ca,ca-ri,v*ri,v);
cnt ++;
}
for(int i = 1 ; i <= Max ; i ++){
if(flag[i])continue;
flag[i] = 1;
dfs(depth + 1,v * 10 + i);
flag[i] = 0;
}
}
}
int main(void){
while(scanf("%d",&ca) == 1){
cnt = 0;
for(int left = 1 ; left < ca ; left ++){
flag[0] = 1;
if(check(left)){
ri = ca - left;
dfs(0,0);
}
memset(flag,0,sizeof(flag));
}
printf("%d\n",cnt);
}
return 0;
}
import java.util.Scanner;
public class DaiFenShu
{
static int kinds=0;
static int a[]=new int[10];
static boolean vis[]=new boolean[10];//全排列避免重复
static void check(int a[],int n,int num)
{
int begin=String.valueOf(num).length();
String str="";
for(int i=1;i<n;i++) str+=a[i];
for(int k=1;k<begin+1;k++)
{
int num1=Integer.valueOf(str.substring(0,k));
if(num1<num)
{
for(int j=k+(n-k)/2;j<n-1;j++)
{
int num2=Integer.valueOf(str.substring(k,j));
int num3=Integer.valueOf(str.substring(j,n-1));
if(num2>num3 && num2%num3==0)
{
if(num==num1+num2/num3)
{
// System.out.println(num+" = "+num1+"+"+num2+"/"+num3);
kinds++;
}
}
}
}
}
}
static void dfs(int start,int n,int num)
{
if(start==n)
{
check(a,n,num);
}
else
{
for(int i=1;i<n;i++)
{
if(!vis[i])
{
a[start]=i;
vis[i]=true;
dfs(start+1,n,num);
vis[i]=false;
}
}
}
}
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
int num=cin.nextInt();
long start=System.currentTimeMillis();
dfs(1,10,num);
long end=System.currentTimeMillis();
// System.out.println(end-start);//运行时间
System.out.println(kinds);
}
}
#include <stdio.h>
int funa(int a)
{
int sum[10];
int temp=0;
memset(sum,0,10);
while(a)
{
temp=a%10;
if(temp==0)
{
return 0 ;
}
if(sum[temp]==1)
{
return 0 ;
}
sum[temp]=1 ;
a/=10;
}
return 1 ;
}
int funb(int N, int a ,int b )
{
int sum[10];
int temp=0;
int i=0 ;
memset(sum,0,10);
while(N)
{
temp=N%10;
if(temp==0)
{
return 0;
}
if(sum[temp]==1)
{
return 0 ;
}
sum[temp]=1;
N/=10;
}
while(b) //b!=0
{
temp=b%10;
if(temp==0)
{
return 0 ;
}
if(sum[temp]==1)
{
return 0 ;
}
sum[temp]=1;
b/=10;
}
while(a)
{
temp=a%10;
if(temp==0)
{
return 0 ;
}
if(sum[temp]==1)
{
return 0 ;
}
sum[temp]=1;
a/=10;
}
for(i=1;i<10;i++)
{
if(sum[i]!=1)
{
return 0 ;
}
}
return 1 ;
}
int daifenshujianyan(int yanzhengshu,int N)
{
int i=0 ;
for(i=1;i<=98765;i++)
{
if(funa(i))
{
if(funb(N-yanzhengshu,yanzhengshu*i,i))
{
printf("%d=%d+%d/%d\n",N,N-yanzhengshu,yanzhengshu*i,i);
return 1;
}
}
}
return 0 ;
}
void main()
{
int N =0 ;
int i=0 ;
int count=0;
scanf("%d",&N);
freopen("D:\\mytemp.txt","w",stdout);
for(i=1;i<N;i++)
{
if(daifenshujianyan((N-i),N))
{
count++;
}
}
printf("%d",count);
}
一开始没理解题意,慢慢改过来的100=7+4836/52
100=82+3546/197
100=94+1578/263
100=81+5643/297
100=96+1428/357
100=81+7524/396
100=96+1752/438
100=96+2148/537
100=91+5742/638
100=91+5823/647
100=3+69258/714
100=91+7524/836
public class MyTest {
private static Set<Integer> all = new HashSet<>();
private static Set<Integer> temp1 = new HashSet<>();
private static Set<Integer> temp2 = new HashSet<>();
public static void main(String[] args) {
for(int i= 1; i<9876; i++) {
all.clear();
if(isDuplicate(i, temp1)) {
continue;
}
for(int j = 2; j<100; j++) {
if(!isDuplicate(j*i, temp1)) {
int y = 100-j;
if(!isDuplicate(y, temp2) && all.size()==9) {
System.out.println(100 + "=" + y + "+" + j*i + "/" + i);
}else {
all.removeAll(temp1);
}
}
}
}
}
private static boolean isDuplicate(int n, Set<Integer> temp) {
temp.clear();
int i = 0;
boolean flag = false;
while(n>0) {
int x = n % 10;
temp.add(x);
n = n/10;
i++;
}
if(temp.contains(0) || temp.size()<i || temp.removeAll(all)) {
flag = true;
}else {
all.addAll(temp);
}
return flag;
}
}