题目:带分数 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
代码如下import java.util.Scanner;public class test9 {
public static int jishu=0;//用于计算满足条件数的个数
public static int[] a=new int[15];
public static int fenmu;
public static int fenzi=1;
public static int changshu=1;//ch常数部分
public static boolean flag=true;//一个标志位
public static int cishu=0;
public static void main(String [] args){
int k,temp;
int changshu;
Scanner s=new Scanner(System.in);
int r=s.nextInt();
for(changshu=1;changshu<r;changshu++){
test9.changshu=changshu;
for(fenmu=1;;fenmu++){//这点事有问题的,分母自加后值是没有变化,不知到为什么???
int shengyu=r-changshu;
// System.out.println("shengyu="+shengyu);
fenzi=fenmu*shengyu;
System.out.println("fenmu="+fenmu+" fenzi="+fenzi);
if(flag=true){
fenli();//进行数的分离操作
if(isShiWei()<10){
flag=true;
if(isShiWei()==9){
for(k=0;k<9;k++){
temp=a[k];
if(havaDai(temp)!=1){
break;
}else{
if(k==8){
jishu++;
}
}
}
}
}else{
flag=false;
}
}
if(flag==false)
break;
}
}
System.out.println("jishu"+jishu);
}
public static int isShiWei(){//判断整数部分 分子 分母上位数之和是否是十位
for(int i=14;i>=0;i--){
if(a[i]!=0){
// System.out.println("i+1="+(i+1));
return (i+1);
}
if(a[0]==0)
return 0;
}
return -1;
}
public static void fenli(){//此操作是为了将整数部分 分子 分母上的各个位的数字分离
int i=0;
int temp=0;
while(changshu!=0){
temp=changshu%10;
changshu=changshu/10;
// System.out.println("temp="+temp);
a[i]=temp;
i++;
}
while(fenmu!=0){
temp=fenmu%10;
fenmu=fenmu/10;
a[i]=temp;
i++;
}
while(fenzi!=0){
temp=fenzi%10;
fenzi=fenzi/10;
a[i]=temp;
i++;
}
System.out.println("i+1= "+(i+1));
cishu++;
}
public static int havaDai(int temp){
for(int i=0;i<10;i++){
if(temp==a[i]){
return 1;
}
}
return 0;
}
}静态域 蓝桥杯 java蓝桥杯java
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
例如:
用户输入:
100
程序输出:
11再例如:
用户输入:
105
程序输出:
6
资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 3000ms
代码如下import java.util.Scanner;public class test9 {
public static int jishu=0;//用于计算满足条件数的个数
public static int[] a=new int[15];
public static int fenmu;
public static int fenzi=1;
public static int changshu=1;//ch常数部分
public static boolean flag=true;//一个标志位
public static int cishu=0;
public static void main(String [] args){
int k,temp;
int changshu;
Scanner s=new Scanner(System.in);
int r=s.nextInt();
for(changshu=1;changshu<r;changshu++){
test9.changshu=changshu;
for(fenmu=1;;fenmu++){//这点事有问题的,分母自加后值是没有变化,不知到为什么???
int shengyu=r-changshu;
// System.out.println("shengyu="+shengyu);
fenzi=fenmu*shengyu;
System.out.println("fenmu="+fenmu+" fenzi="+fenzi);
if(flag=true){
fenli();//进行数的分离操作
if(isShiWei()<10){
flag=true;
if(isShiWei()==9){
for(k=0;k<9;k++){
temp=a[k];
if(havaDai(temp)!=1){
break;
}else{
if(k==8){
jishu++;
}
}
}
}
}else{
flag=false;
}
}
if(flag==false)
break;
}
}
System.out.println("jishu"+jishu);
}
public static int isShiWei(){//判断整数部分 分子 分母上位数之和是否是十位
for(int i=14;i>=0;i--){
if(a[i]!=0){
// System.out.println("i+1="+(i+1));
return (i+1);
}
if(a[0]==0)
return 0;
}
return -1;
}
public static void fenli(){//此操作是为了将整数部分 分子 分母上的各个位的数字分离
int i=0;
int temp=0;
while(changshu!=0){
temp=changshu%10;
changshu=changshu/10;
// System.out.println("temp="+temp);
a[i]=temp;
i++;
}
while(fenmu!=0){
temp=fenmu%10;
fenmu=fenmu/10;
a[i]=temp;
i++;
}
while(fenzi!=0){
temp=fenzi%10;
fenzi=fenzi/10;
a[i]=temp;
i++;
}
System.out.println("i+1= "+(i+1));
cishu++;
}
public static int havaDai(int temp){
for(int i=0;i<10;i++){
if(temp==a[i]){
return 1;
}
}
return 0;
}
}静态域 蓝桥杯 java蓝桥杯java
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货