试题_(带分数)03
来源:互联网 发布:刷棒棒糖辅助软件 编辑:程序博客网 时间:2024/06/05 05:44
问题描述
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.Scanner; public class ys_09 { public static void main(String[] args) { //将等式定义为:N=A+B/C Scanner scanner=new Scanner(System.in); N=scanner.nextInt(); long start=System.currentTimeMillis(); int[] s=new int[]{1,2,3,4,5,6,7,8,9}; NLength=(N+"").length(); allRange(s, 0, s.length-1); long end=System.currentTimeMillis(); System.out.println("耗时:"+(end-start)+" ms"); System.out.println("总数为:"+kinds+" 种"); } public static int N; public static int NLength;//N数字的长度 public static int kinds; public static void process(int[] s){ String str=""; for(int i=0;i<9;i++) str+=s[i]; int A,B,C,NMA,BC,BMCL,BLastNumber; //A的位数 for(int i=1;i<=NLength;i++){ /* //方法1 A=Integer.valueOf(str.substring(0, i)); NMA=N-A;//N减去A的值 if(NMA<=0)return; BC=9-i;//B和C还有多少为可用 BMCL=(NMA+"").length();//B/C的长度 //确定的B的结束为止 for(int j=i+BC/2;j<=8;j++){//可以优化这里 B=Integer.valueOf(str.substring(i,j)); C=Integer.valueOf(str.substring(j,9)); if(B%C==0&&B/C==NMA){ kinds++; System.out.println(N+"="+A+"+"+B+"/"+C); } } */ //方法2 A=Integer.valueOf(str.substring(0, i)); NMA=N-A; if(NMA<=0)return; BC=9-i;//B和C总共多少位 BLastNumber=(NMA*s[8])%10;//B最后的数字 //j为B最后一个数字的位置 //B最少占有B和C全部数字的一半,否则B/C不可能为整数 for(int j=i+BC/2-1;j<=7;j++){ //找到符合的位置 if(s[j]==BLastNumber){ B=Integer.valueOf(str.substring(i,j+1)); C=Integer.valueOf(str.substring(j+1,9)); if(B%C==0&&B/C==NMA){ kinds++; System.out.println(N+"="+A+"+"+B+"/"+C); } //符合要求的位置只可能出现一次 break; } } } } public static void swap(int[] s,int a,int b){ if(a==b)return; int tmp=s[a]; s[a]=s[b]; s[b]=tmp; } //全排列 public static void allRange(int[] s,int k,int m){ if(k==m){ process(s); return; } else{ for(int i=k;i<=m;i++){ swap(s,k,i); allRange(s, k+1, m); swap(s,k,i); } } } } import java.util.Scanner;public class ys_09 { public static void main(String[] args) { //将等式定义为:N=A+B/C Scanner scanner=new Scanner(System.in); N=scanner.nextInt(); long start=System.currentTimeMillis(); int[] s=new int[]{1,2,3,4,5,6,7,8,9}; NLength=(N+"").length(); allRange(s, 0, s.length-1); long end=System.currentTimeMillis(); System.out.println("耗时:"+(end-start)+" ms"); System.out.println("总数为:"+kinds+" 种"); } public static int N; public static int NLength;//N数字的长度 public static int kinds; public static void process(int[] s){ String str=""; for(int i=0;i<9;i++) str+=s[i]; int A,B,C,NMA,BC,BMCL,BLastNumber; //A的位数 for(int i=1;i<=NLength;i++){ /* //方法1 A=Integer.valueOf(str.substring(0, i)); NMA=N-A;//N减去A的值 if(NMA<=0)return; BC=9-i;//B和C还有多少为可用 BMCL=(NMA+"").length();//B/C的长度 //确定的B的结束为止 for(int j=i+BC/2;j<=8;j++){//可以优化这里 B=Integer.valueOf(str.substring(i,j)); C=Integer.valueOf(str.substring(j,9)); if(B%C==0&&B/C==NMA){ kinds++; System.out.println(N+"="+A+"+"+B+"/"+C); } } */ //方法2 A=Integer.valueOf(str.substring(0, i)); NMA=N-A; if(NMA<=0)return; BC=9-i;//B和C总共多少位 BLastNumber=(NMA*s[8])%10;//B最后的数字 //j为B最后一个数字的位置 //B最少占有B和C全部数字的一半,否则B/C不可能为整数 for(int j=i+BC/2-1;j<=7;j++){ //找到符合的位置 if(s[j]==BLastNumber){ B=Integer.valueOf(str.substring(i,j+1)); C=Integer.valueOf(str.substring(j+1,9)); if(B%C==0&&B/C==NMA){ kinds++; System.out.println(N+"="+A+"+"+B+"/"+C); } //符合要求的位置只可能出现一次 break; } } } } public static void swap(int[] s,int a,int b){ if(a==b)return; int tmp=s[a]; s[a]=s[b]; s[b]=tmp; } //全排列 public static void allRange(int[] s,int k,int m){ if(k==m){ process(s); return; } else{ for(int i=k;i<=m;i++){ swap(s,k,i); allRange(s, k+1, m); swap(s,k,i); } } }}
0 0
- 试题_(带分数)03
- 第四届_带分数
- 蓝桥杯 历届试题 带分数
- 历届试题 带分数
- 蓝桥杯-历届试题-带分数
- 历届试题 带分数
- 蓝桥杯历届试题 带分数
- 蓝桥杯 历届试题 带分数
- 蓝桥杯 历届试题 带分数
- 蓝桥杯 历届试题 带分数
- 蓝桥杯 历届试题 带分数
- 蓝桥杯 历届试题 带分数
- 蓝桥杯 历届试题 带分数
- 蓝桥杯 历届试题 带分数
- 历届试题 带分数
- 蓝桥杯 历届试题 带分数
- 历届试题 带分数
- 蓝桥杯 历届试题 带分数
- Java重载,当参数为null时,调用情况
- Thymeleaf中用HTML5语法设置标签和属性
- Jetty Continuation机制
- 第一篇test
- LeetCode : Fizz Buzz
- 试题_(带分数)03
- 用jq实现无限轮播
- CCF CSP 压缩编码
- mysqldump: Couldn't execute 'SAVEPOINT sp'
- FFmpeg常用推流命令
- [LeetCode]---word-break
- 棋牌游戏服务器架构设计
- 这8种武器点亮程序员的个人品牌
- 趣写算法系列之--匈牙利算法