import java.util.Iterator
import java.util.LinkedList
import java.util.ListIterator
import java.util.Scanner
public class LuckyNumber
{
static Integer count = 0
static Integer index = 1
public static void getLuckyNum(LinkedList al, Integer min, Integer max, Integer luckyNum)
{
ListIterator lt = al.listIterator()
Integer maxSize = al.size()
boolean judge = true
for(Integer i = 1i <= maxSizei++)
{
lt.next()
if(i % luckyNum == 0)
{
judge = false
lt.remove()
}
}
if(judge)
{
lt = al.listIterator()
while(lt.hasNext())
{
if((Integer)lt.next() >min)
{
count =al.size() - lt.previousIndex()
return
}
}
return
}
luckyNum = (Integer)al.get(index++)
getLuckyNum(al, min, max, luckyNum)
}
public static void main(String []src)
{
LinkedList al = new LinkedList()
Integer min = 0
Integer max = 0
Scanner sn = new Scanner(System.in)
min = sn.nextInt()
max = sn.nextInt()
for(int i = 1i <maxi++)
{
al.add(i)
}
getLuckyNum(al, min, max, 2)
System.out.println(count)
}
}
这道题可以这么来分解。把整数'1'分解为以下形式。
1 = 1/a + 1/b + 1/c + 1/d,并且 0 <a, b, c, d <20.,a,b,c,d都是整数。
a, b, c, d 代表每喝完一瓶酒后,剩余的海盗数量。
假设最开始海盗数量一共为x人,那么a = x, 那么海盗船长第一次喝了 1/x瓶酒
喝完第一瓶酒之后,还剩余b人,即第一次喝倒了x-b人,第二次海盗船长喝了1/b瓶酒。。。。
依次类推。海盗船一共喝了 1/x + 1/b + 1/c + 1/d = 1瓶酒。
写程序就这么写吧。
==============================
public class haidao {
public static void main(String[] args) {
int minPerson = 1
double allPersons = 4
while (allPersons <= 20) {
int firstPersons = minPerson
while (firstPersons <= allPersons) {
int secondPersons = minPerson
while (secondPersons <= allPersons - firstPersons) {
int thirdPersons = minPerson
while (thirdPersons <= allPersons - firstPersons
- secondPersons) {
double captionDrinkedTotal = 1.0/allPersons
+ 1.0/(allPersons - firstPersons)
+ 1.0/(allPersons - firstPersons - secondPersons)
+ 1.0/(allPersons - firstPersons - secondPersons - thirdPersons)
- 1
if (Math.abs(captionDrinkedTotal) <0.00000001) {
System.out.print("海盗总数:" + allPersons)
System.out.print(" 第一次喝倒人数:" + firstPersons)
System.out.print(" 第二次喝倒人数:" + secondPersons)
System.out.println(" 第三次喝倒人数:" + thirdPersons)
}
thirdPersons++
}
secondPersons++
}
firstPersons++
}
allPersons++
}
}
}
==========
运行结果:
海盗总数:12.0 第一次喝倒人数:6 第二次喝倒人数:2 第三次喝倒人数:2
海盗总数:15.0 第一次喝倒人数:5 第二次喝倒人数:7 第三次喝倒人数:1
海盗总数:18.0 第一次喝倒人数:9 第二次喝倒人数:6 第三次喝倒人数:1
海盗总数:20.0 第一次喝倒人数:15 第二次喝倒人数:1 第三次喝倒人数:2
==========
PS:只要把minPerson = 1,改为 minPerson = 0,就可以允许某次喝酒没有海盗倒下。
蓝桥杯java软件开发考算法和数据结构的实际应用能力。
蓝桥杯全国软件和信息技术专业人才大赛是由中华人民共和国工业和信息化部人才交流中心主办,国信蓝桥教育科技(北京)股份有限公司承办的计算机类学科竞赛。截至2022年2月,蓝桥杯全国软件和信息技术专业人才大赛已举办12届。2022年8月23日,被教育部拟确定2022—2025学年面向中小学生的全国性竞赛活动。
组织机构:蓝桥杯全国软件和信息技术专业人才大赛由中华人民共和国工业和信息化部人才交流中心作为主办单位,由国信蓝桥数字科技有限公司负责承办并统一收取大赛相关费用;大赛组委会秘书处设在中华人民共和国工业和信息化部人才交流中心。
蓝桥杯全国软件和信息技术专业人才大赛在报名人数比较集中的,符合报名要求、且能提供足够数量的符合大赛需求的软件环境和硬件设备的院校设立赛点。赛点的设立既考虑报名人数,又要考虑区域的地理分布。
赛点的设立由蓝桥杯大赛组委会确认,并签订相应协议;各学校赛点严格按照大赛章程、实施办法及《“全国软件和信息技术专业人才大赛”规则与赛场纪律》组织省赛。