蓝桥杯训练-带分数

 

问题描述

100 可以表示为带分数的形式:100 = 3 + 69258 / 714。

还可以表示为:100 = 82 + 3546 / 197。

注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。

类似这样的带分数,100 有 11 种表示法。

输入格式

从标准输入读入一个正整数N (N<1000*1000)

输出格式

程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。

注意:不要求输出每个表示,只统计有多少表示法!

样例输入1

100

样例输出1

11

样例输入2

105

样例输出2

6

 

#include
#include 
using namespace std;
bool judge(int i,int numerator,int denominator){
	int num[10]={0,0,0,0,0,0,0,0,0,0};
	//判断I中是否重复出现
	while(i!=0){
		int mod=i%10; 
		if(num[mod]==1){
			return false;
		}else{
			num[mod]=1;
		}
		i/=10;
	}
	//判断分子中是否重复出现 
	while(numerator!=0){
		int mod=numerator%10; 
		if(num[mod]==1){
			return false;
		}else{
			num[mod]=1;
		}
		numerator/=10;
	}
	//判断分母中是否重复出现 
	while(denominator!=0){
		int mod=denominator%10; 
		if(num[mod]==1){
			return false;
		}else{
			num[mod]=1;
		}
		denominator/=10;
	}
	//判断是否1-9都出现
	for(int i=1;i<10;i++){
		if(num[i]!=1){
			return false;
		}
	}
	//判断是否0出现 
	if(num[0]==1){
		return false;
	}
	return true;
}

int main(void){
	int n;
	cin>>n;
	int count=0;
	for(int i=1;i

 

你可能感兴趣的:(C++,算法)