蓝桥杯之带分数
来源:互联网 发布:海牛大数据 编辑:程序博客网 时间:2024/06/03 05:31
标题:带分数
100 可以表示为带分数的形式:100 = 3 + 69258 / 714
还可以表示为:100 = 82 + 3546 / 197
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
题目要求:
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
例如:
用户输入:
100
程序输出:
11
再例如:
用户输入:
105
程序输出:
6
资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 3000ms
思路:dfs列出1至9的全排列,然后将‘+’与‘/’插入到每个全排列中,判断等式
N == a+b/c && b%c == 0;
为真则count++;
全局变量:
<span style="font-size:18px;">public static boolean[] arr = new boolean[10];public static int[] numA = new int[9];public static int count = 0;</span>
dfs全排列代码如下:
<span style="font-size:18px;">public static void dfs(int p,int num){if(p == 9){pd(numA,num);//判断函数return;</span>
<span style="font-size:18px;">}else{for(int i = 1;i<10;i++){if(arr[i]){numA[p] = i;arr[i] = false;dfs(p+1,num);arr[i] = true;}}}}</span>
将数组转化成String,更容易插入。
插入运算符规则:a的位数<=N的位数,b的位数>=c的位数。
判断代码如下:
<span style="font-size:18px;">public static void pd(int[] arr,int num){int a,b,c;int leng = String.valueOf(num).length();String str = "";for(int i = 0;i<arr.length;i++)str+=arr[i];for(int i = 1;i<= leng;i++){a = Integer.valueOf(str.substring(0,i));for(int j = (9-i)/2+i;j<9;j++){b = Integer.valueOf(str.substring(i,j));c = Integer.valueOf(str.substring(j,str.length()));if((num == a+b/c)&&(b%c == 0)){count++;}} }}</span>
完整代码:
<span style="font-size:18px;">import java.util.*;class Main{public static boolean[] arr = new boolean[10];public static int[] numA = new int[9];public static int count = 0;public static void main(String[] arge){Scanner cin = new Scanner(System.in);int num = cin.nextInt();Arrays.fill(arr,true);long start = System.currentTimeMillis();dfs(0,num);start = System.currentTimeMillis() - start;System.out.println(start);System.out.println(count);}public static void dfs(int p,int num){if(p == 9){pd(numA,num);return;}else{for(int i = 1;i<10;i++){if(arr[i]){numA[p] = i;arr[i] = false;dfs(p+1,num);arr[i] = true;}}}}public static void pd(int[] arr,int num){int a,b,c;int leng = String.valueOf(num).length();String str = "";for(int i = 0;i<arr.length;i++)str+=arr[i];for(int i = 1;i<= leng;i++){a = Integer.valueOf(str.substring(0,i));for(int j = (9-i)/2+i;j<9;j++){b = Integer.valueOf(str.substring(i,j));c = Integer.valueOf(str.substring(j,str.length()));if((num == a+b/c)&&(b%c == 0)){count++;}} }}}</span>
转载请附带原址:http://blog.csdn.net/u013451048
0 0
- 蓝桥杯之带分数
- 蓝桥杯之带分数
- 2016蓝桥杯假期任务之《带分数》
- 【蓝桥杯】带分数
- 带分数 - 蓝桥杯
- 蓝桥杯,带分数
- 蓝桥杯 带分数
- 蓝桥杯-带分数
- 蓝桥杯:带分数
- 蓝桥杯 带分数
- 蓝桥杯---带分数
- 蓝桥杯 带分数
- 蓝桥杯 带分数
- 蓝桥杯带分数
- 蓝桥杯 带分数
- 蓝桥杯-带分数
- 蓝桥杯 带分数
- 带分数 蓝桥杯
- ZOJ 1047 Image Perimeters
- android开发学习--------Activity的创建及数据传递f
- 【Jason's_ACM_解题报告】Quadtrees
- 双栈结构
- POJ 3040 - Allowance(贪心)
- 蓝桥杯之带分数
- zoj 1298 && poj 1135 Domino Effect
- 搭建hbase
- hdu 2546 饭卡
- Struts2通过请求参数值指定配置的结果
- web开发N例-案例2:PHP绘制图片、绘制中文
- 修改discuz模板都需要注意什么
- HDU 5150 && UVALive 5061 (LCA标记)
- acm2009