带分数

来源:互联网 发布:java项目开发硬件环境 编辑:程序博客网 时间:2024/05/14 20:53
问题描述

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



主要的思想就是枚举,通过适当的条件进行限制,减少枚举的次数
import java.util.*;public class Main  {  public static boolean check(int num1,int num2,int num3)//判断三个数1-9并且不重复{String str=Integer.toString(num1)+Integer.toString(num2)+Integer.toString(num3);if(str.length()!=9)//位数不为9肯定不行return false;for(int i=0;i<str.length();i++){if(str.charAt(i)=='0')return false;//不能出现0.for(int j=i+1;j<str.length();j++)if(str.charAt(i)==str.charAt(j))//不能相等return false;}return true;}public static int bit_c(int num)//统计一个数字的位数{return Integer.toString(num).length();}    public static void main(String[] arg)      {          Scanner sc=new Scanner(System.in);          int n=sc.nextInt();        int count=0;        for(int i=1;i<n;i++)//枚举1到n-1        {        int m=n-i;        for(int j=1;bit_c(j)<=(9-bit_c(m))/2;j++)//根据位数进行限制枚举次数        {        if(check(i,j,j*m)==true)//判断是否满足条件        {        count++;                }        }        }        System.out.println(count);      } } 









0 0
原创粉丝点击