题目描述:
说白了,其实就是求a和b不能组成的最大数;
题目解析:
这个题我看了网络上给的答案,可是我感觉有点投机取巧的感觉了,答案是直接给输出来的,
直接就a*b-a-b,可是这个答案一般人都不知道的,所以我用动态规划来解决这个题,下面我来介绍
一下我的方法,其实就是我打个比方,定义一个长度为100的array数组,并且给他们全部都赋值为0
如下所示:
0 0 0 0 0 0 0 0 0 0 0
1 2 3 4 5 6 7 8 9 10 11
打个比方就是输入的是a=3,b=5;
那么就把array[3]=1,array[5]=1;
然后我们可以遍历这个数组的,如果被遍历的数组的值是1的话,那么我们把array[i+a]和
array[i+b]都赋值为1,赋值为1的意思就是这个数可以被a和b给组合起来的,
但是为了找到最后的大数,我们还要定义两个数number,count;
number是用来表示数组的下标的,而count是用来表示相邻的数组的值为1的个数,
在上面你会发现一旦count大于或等于a,b中的大数的时候就可以了,这时候的number表示的下 标就可以表示我们要找的数了
代码如下:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner m=new Scanner (System.in);
int a=m.nextInt();
int b=m.nextInt();
int max=a>b?a:b;
long array[]=new long[9999999];
Arrays.fill(array,0);
array[a]=1;
array[b]=1;
int number=0;
int count=0;
for(int k=1;k<array.length;k++)
{
if(array[k]==0)
{
number=k;
count=0;
}
else
{
array[k+a]=1;
array[k+b]=1;
count++;
}
if(count==max)
break;
}
System.out.println(number);
}
}
0.0分
13 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复