蓝桥杯:带分数

xiaoxiao2021-02-27  337

带分数     100 可以表示为带分数的形式:100 = 3 + 69258 / 714     还可以表示为:100 = 82 + 3546 / 197     注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。     类似这样的带分数,100 有 11 种表示法。 题目要求: 从标准输入读入一个正整数N (N<1000*1000) 程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。 注意:不要求输出每个表示,只统计有多少表示法! 例如: 用户输入: 100 程序输出: 11 再例如: 用户输入: 105 程序输出:

6

import java.util.Scanner; public class Main{ public static int n,count; public static int a[]={1,2,3,4,5,6,7,8,9}; public static void main(String[] args) { Scanner s=new Scanner(System.in); n=s.nextInt(); dft(0); System.out.println(count); } public static void dft(int k){//排列 if(k==a.length){ fun(); return; } for(int i=k;i<a.length;++i){ int t=a[i]; a[i]=a[k]; a[k]=t; dft(k+1); t=a[i]; a[i]=a[k]; a[k]=t; } } public static void fun(){ for(int i=0;i<7;i++){//留出两个数,总共需要三个数 int x=g(0,i); for(int j=i+1;j<8;j++){//留一个 int y=g(i+1,j); int z=g(j+1,a.length-1); if(x+1.0*y/z==n) count++;//必须乘1.0 否则会有其他可以整除z的数也算上 } } } public static int g(int e,int f){ int k=0; for(int i=e;i<=f;i++){ k+=a[i]; k*=10; } return k/=10; } }

转载请注明原文地址: https://www.6miu.com/read-2963.html

最新回复(0)