【蓝桥杯VIP】试题 历届试题 带分数(满分 Python解法+Java解法)

资源限制
时间限制:1.0s 内存限制:256.0MB

问题描述
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

Python解法:

"""
#复制列表的简易方法:
L=[34,65,2,1,86,0]
L1=[j for j in L]
L.append((12,12))
print(L)    # [34, 65, 2, 1, 86, 0, (12, 12)]
print(L1)    # [34, 65, 2, 1, 86, 0]list1=["1","2","3","4","5","6","7","8","9"]
list1.sort(reverse=True)
print(list1)   # ['9', '8', '7', '6', '5', '4', '3', '2', '1'] """# 100分
# 判断 i是否存在重复数字 并 判断 i是否存在li没有的数字
def check(i,li):li1=list(str(i))li2=list(set(li1))flag=Trueif len(li1)==len(li2):  #判断 i是否存在重复数字for j in li1:if j not in li:    #判断 i是否存在li没有的数字flag=Falsebreakelse:flag=Falsereturn flagN=int(input())
list1=["1","2","3","4","5","6","7","8","9"]
count=0'''
假设:N=a+b/c
'''#遍历整数 a
for a in range(1,N):if check(a, list1)==False:continue#复制list1list2=[k for k in list1]#删除出现在a的元素for j in str(a):list2.remove(j)#遍历分母 cfor c in range(1,10**5):   #简单分析可知:分母的最大范围是四位数if check(c,list2)==False:continueb=(N-a)*cif len(str(b))+len(str(c))>len(list2):'''list2的长度是符合要求的分子和分母的总长,如果此时的分子和分母的总长大于list2的长度,则说明该分子j不符合要求且因为j是不断增长的,因此以后的j也会不符合要求,此时需要直接跳出循环.'''breakif check(b, list2)==False or len(str(b))+len(str(c))!=len(list2):continue#复制list2list3=[k for k in list2]#删除出现在b的元素for j in str(b):list3.remove(j)#因为list3的范围要比list2小,所以此时还要再判断c中是否存在list3中不存在的数字if check(c,list3)==True and len(str(c))==len(list3):count+=1print(count)

Java解法:

// 100分
import java.util.*;public class Main {/*假设:N=a+b/c*/private static int N;private static int count=0;private static List<String> list1=new ArrayList<String>();
//    private static List<String> list2=new ArrayList<String>();
//    private static List<String> list3=new ArrayList<String>();public static void main(String[] args){Scanner scan=new Scanner(System.in);N=scan.nextInt();//给list1赋值Collections.addAll(list1,"1","2","3","4","5","6","7","8","9");for(int a=1;a<N;a++){if(check(a,list1)==false){continue;}//复制list1List<String> list2=new ArrayList<String>();list2.addAll(list1);//删除list1与 a中同时出现的数字String[] str1=Integer.toString(a).split("");for(int i=0;i<str1.length;i++){list2.remove(str1[i]);}//遍历字母 cfor(int c=1;c<100000;c++){    //简单分析可知:分母的最大范围是四位数if(check(c,list2)==false){continue;}int b=(N-a)*c;String[] str2=Integer.toString(b).split("");String[] str3=Integer.toString(c).split("");/*list2的长度是符合要求的分子和分母的总长,如果此时的分子和分母的总长大于list2的长度,则说明该分子j不符合要求且因为j是不断增长的,因此以后的j也会不符合要求,此时需要直接跳出循环.*/if(str2.length+str3.length>list2.size()){break;}if(check(b,list2)==false || str2.length+str3.length!=list2.size()){continue;}//复制list2List<String> list3=new ArrayList<String>();list3.addAll(list2);//删除list1与 b中同时出现的数字for(int i=0;i<str2.length;i++){list3.remove(str2[i]);}//因为list3的范围要比list2小,所以此时还要再判断c中是否存在list3中不存在的数字if(check(c,list3)==true && str3.length==list3.size()){count++;}}}System.out.println(count);}//判断 n是否存在重复数字 并 判断 n是否存在li没有的数字public static boolean check(int n,List li){String[] arr1=Integer.toString(n).split("");boolean isFlag=true;for(int i=0;i< arr1.length;i++){   //判断 i是否存在重复数字for(int j=i+1;j< arr1.length;j++){if(arr1[i].equals(arr1[j])){isFlag=false;break;}}if(isFlag==false){return isFlag;}}for(int i=0;i< arr1.length;i++){      //判断 i是否存在li没有的数字isFlag=false;for(int j=0;j<li.size();j++){if(arr1[i].equals(li.get(j))){isFlag=true;break;}}if(isFlag==false){break;}}return isFlag;}}

【蓝桥杯VIP】试题 历届试题 带分数(满分 Python解法+Java解法)相关推荐

  1. 蓝桥杯经典算法 不定方程解法 蓝桥杯练习系统 历届试题 买不到的数目

    蓝桥杯经典算法 第六讲 不定方程解法   蓝桥杯算法教学与培训_蓝桥杯经典算法 第六讲 不定方程解法 不定方程的一般解法   朴素算法 public static void main(String[] ...

  2. “蓝桥杯”练习系统——历届试题

    1. 核桃的数量(水题) 思路:求两个数的最大公约数可以用欧几里得算法(辗转相除法),即 a与b的最大公约数 等于 b与(a对b取余) 的最大公约数,当b等于0时,a与b的最大公约数是a.两个数的最小 ...

  3. 蓝桥杯练习系统历届试题 翻硬币

    问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如 ...

  4. 蓝桥杯试题 历届试题 李白打酒

    蓝桥杯试题 历届试题 李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他 ...

  5. 蓝桥杯---试题 历届试题 填字母游戏(博弈)

    试题 历届试题 填字母游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏 ...

  6. 蓝桥杯 试题 历届试题 小数第n位(同余公式模板

    试题 历届试题 小数第n位 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数. 如果我们把有限小数的末尾加上无限多个0, ...

  7. 试题 历届试题 带分数(全排列)

    试题 历届试题 带分数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 ...

  8. 蓝桥杯--第八届省赛试题-电子钟程序设计

    蓝桥杯-第八届省赛试题-电子钟程序设计 题目: 思路 1.显示温度使用大赛提供的onewire.c,只需自己添加读取函数. 2.设计时钟程序,或者使用DS1302.c(这里使用的是自己写的函数) 3. ...

  9. 蓝桥杯java初赛本科组,2012年第三届蓝桥杯全国软件专业人才设计与开发大赛Java本科组初赛试题...

    这是2012年第三届蓝桥杯全国软件专业人才设计与开发大赛Java本科组初赛试题的完整版 2012第三届蓝桥杯软件大赛Java语言本科组初赛试题 (说明:1-4题为结果填空,5-7为程序填空,8-10为 ...

最新文章

  1. python跳出双层for循环的解决方法
  2. 英语和汉语谁更高效?17大主流语言测试结果:没有优劣之分,带宽都是每秒39bit...
  3. python 代码-我整理的Python代码规则
  4. 深入基础(一)模块化
  5. 强化学习(part3)--Q-Learning
  6. U盘装XP系统(含截图,2012最新原创超简单方法)
  7. Docker的常规应用手册
  8. pace.js – 加载进度条插件
  9. 语音识别是什么意思_语音识别的翻译_音标_读音_用法_例句_爱词霸在线词典
  10. 神舟测试软件,神舟战神P5常规性能软件测试_神舟 战神P5-i78172D1_笔记本评测-中关村在线...
  11. whose size is larger than the fetch size
  12. 微博如何取消关注不存在的_为什么“取消文化”将继续存在
  13. 谷仓(某校老师原创题)
  14. Goroutine调度器及面试精选
  15. matlab乖离率计算,终于有人把“乖离率”说清楚了,看懂少走十年弯路!
  16. 关于signed main()不报超时与int main()报超时
  17. Ubuntu 20.04使用deepin wine安装Windows官方版QQ、微信、Tim等
  18. Java web框架
  19. 保密相册计算机,‎加密相册(新版) - 密码计算机照片保险箱 v App Storu
  20. 微信小程序 - 下载文件到本地、打开文档

热门文章

  1. java8 获取部门树形结构
  2. 物联网卡拉开智能家居变革序幕
  3. eclipse启动Tomcat报错,显示8005, 8080端口被占用
  4. js 秒数转换成时分
  5. IDEA 单行多行注释设置从当前鼠标位置开始 注释快捷键
  6. 《Long-term Recurrent Convolutional Networks for Visual Recognition and Description》论文翻译
  7. vue 表单对象里还有对象,多层嵌套校验,制定校验规则
  8. iPhone、iPad、iPod Touch分辨率
  9. js和css的命名规范
  10. EDA技术 一:EDA技术概况及大规模可编程逻辑器件