import java.io.*;
public class PigHome {
public static void calcute_pig(){
int num;
//读取数据,将数据读取到数组pig[][]中,文件放在D:\arithmetic\src\pighome.txt中
File file = new File("D:\\arithmetic\\src\\pighome.txt");
if(!file.exists()){
System.out.println("file is not exist!");
return;
}
FileReader fileReader = null;
BufferedReader reader = null;
try {
fileReader = new FileReader(file);
reader = new BufferedReader(fileReader);
String line = "";
line = reader.readLine();
num = Integer.valueOf(line);
System.out.println(num);
int pig[][] = new int[num][2];
for(int i=0;i<num;i++){
line = reader.readLine();
String[] temp = line.split(" ");
pig[i][0] = Integer.valueOf(temp[0].trim());
pig[i][1] = Integer.valueOf(temp[1].trim());
System.out.println(pig[i][0]+" "+pig[i][1]);
}
//pighome保存猪的数量
int pighome = pig[0][0]+pig[0][1];
//保存已经计算过的猪圈数的最小公倍数
int multi = pig[0][0];
for(int i=0;i<num-1;i++){
//System.out.println("multi="+multi);
while(pighome % pig[i+1][0] != pig[i+1][1]){
pighome += multi;
}
if(i == num-2){
System.out.println("Andy家至少有"+pighome+"只猪!");
}
multi = least_common_multiple(multi,pig[i+1][0]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//最小公倍数
public static int least_common_multiple(int num1,int num2){
return num1*num2/greatest_common_divisor(num1,num2);
}
//最大公约数
public static int greatest_common_divisor(int num1,int num2){
if(num1 > num2){
int temp = num1;
num1 = num2;
num2 = temp;
}
if(num1 == num2 || num2 % num1 == 0)
return num1;
int temp = num2 % num1;
while(num2 % temp != 0 && temp > 1){
num2 =num1;
num1 = temp;
temp = num2 % num1;
}
return temp;
}
public static void main(String[] args){
calcute_pig();
}
}
好久没有写些算法的内容了,题目不是很难,自己随手写了一个算法。
思路分析:
首先,这是一个和余数有关的问题,按照题目的叙述,不难想到和最小公倍数有关系。但是对于求最小公倍数最好的解法就是先求出最大公约数,然后将该2个数相乘再除以他们的最大公约数即可得到最小公倍数。而求最大公约数的方法我所知道的最好的方法就是辗转相除法。
辗转相除法还是我在小学上奥赛班的时候学到的,可能好多地方已经不叫这个名字了。其思路就是对于要计算的2个数字,先看大数能否被小数整除,如果不能就取其余数,然后在去较小数和余数,继续求他们的最小公倍数。
解法分析:
先求出满足第一行,也就是文件第二行的一个猪圈数,即第二行的2个数相加之和,如例子中的4(=3+1),然后判断其是否满足下一行的数据,即是否满足除5余1.显然题目不满足,那么就将所得的数字4不停的加3(这样得到的结果对3的余数不变),知道满足第二行,可以得到16.然后处理下一行的思路一样,不过所加的数变成了15(即3和5的最小公倍数),只有这样才能是得到的结果对3和5除所得的余数不变。
现在回头看看这个题目,根本就没有什么难度,只有一个简单的求2个数的最小公倍数可能稍微有点麻烦。其他的思路都非常容易想到。
分享到:
相关推荐
举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个...
安家岭终端污水处理厂作为安太堡、安家岭矿区污水外排的终端屏障,投运2年多来,受诸多因素影响运行过程中出现了一些问题,如排泥泵堵塞、桁架刮泥机脱轨等,对存在问题进行了梳理和分析,并提出了相应的解决对策。
以安家岭露天矿过渡芦子沟背斜为例,在分析背斜对露天矿生产带来的诸多不利影响的基础上,通过分析安家岭露天矿地质条件以及煤层赋存条件,对安家岭矿开采程序、采排工作面布置、运输系统布置等方面进行了优化研究,有效...
以安家岭露天煤矿过逆断层期间的运输设备为研究对象,综合分析了穿孔、采掘和运输设备的现有能力,通过现场调研和理论分析计算,得出了安家岭露天煤矿保证正常生产需要增加的设备型号和数量,为矿山生产提供了依据。
依据勘查资料分析安家寨煤矿可采煤层的煤岩特征、工业分析、工艺性能及简易可选性等煤质特征,并评价可采煤层的开采技术条件。研究结果表明:矿区内可采煤层的宏观煤岩类型主要为半亮型煤、半暗型煤,微观煤岩类型为...
使用 Scrapy 框架编写爬虫程序抓取《安家》影评信息,爬取电视剧的短评(55593条)、评分、有用数量等数据,保存为 json 格式! 结合 Pandas、Numpy和Matplotlib ,系统存储和处理爬取的大量数据,使用中文 Jieba 分词...
随着社会的发展和人们观念的更新,单身青年的安家置业问题引起了广泛的关注。2021年贝壳研究院发布的《单身青年安家置业调研报告》为我们揭示了单身青年在置业方面的新趋势和偏好。 首先,报告指出单身成年人口数量...
以安家岭露天矿生产实践为例,在深入分析总结安家岭露天矿工作帮及采场坡道形成方案及实践经验上,通过改进优化"采掘+推土机推送"坡道的作业方式,研究量化坡道工作任务量,形成的利用抛掷爆破法爆破前冲量来减少推土机...
这份调研报告详细分析了2021年单身青年的安家置业情况,其中包含了多个与房地产市场以及年轻人的生活态度紧密相关的知识点。 首先,报告描绘了单身青年的置业意愿画像。在不同的婚恋状态下,青年的生活状态和置业...
中信安家幸福之家
由于给定的内容部分全部是“空白演示单击输入您的封面副标题”,并且没有提供实际的报告内容,所以无法直接生成关于“2021‘新杭州人’安家居住研究报告”的知识点。不过,我可以根据这个标题以及一般的居住研究报告...
管理地址admin/login.ASP ... 本产品实现一键抓取海量房源,涉及13个城市(上海 北京 天津 成都 重庆 西安 沈阳 ...1、修正了被搜索引擎收录乱码问题 2、网页上出项的一些BUG 3、优化了广告系统 4、优化了房源抓取系统
为了确定安家岭露天煤矿是否可以采用此技术,分析了安家岭露天煤矿的地质资源条件及生产技术条件,认为安家岭露天煤矿的地质资源条件及生产技术条件适合采用抛掷爆破剥离技术。此外,抛掷爆破剥离技术较为成熟,应用此...
论文重点是对安家儿童福利院管理系统的需求进行分析,设计儿童福利院管理的功能和安家儿童福利院管理系统的数据库,对安家儿童福利院管理系统进行编码,最后进行测试。安家儿童福利院管理系统包括儿童管理、申请领养...
“安家”儿童福利院是一个为社会收容孤儿的福利院,该院需要一个管理和展示的平台,为此开发“安家”儿童福利院管理系统具有重要的实际意义。 本安家儿童福利院管理系统以Eclipse为平台,使用Java语言为后台数据库,...
安家岭露天矿作为我国重要的露天开采煤矿之一,其钻孔作业的精确性直接关系到开采的效率和成本。近年来,随着科技的发展和信息技术的应用,传统的露天矿钻孔作业方式已经无法满足现代化矿山的需求,因此,安家岭露天...
在“小兔安家”的情境中,教师会设计多个相关的数学问题,如12÷2=6,12÷3=4等,引导学生发现乘法口诀与除法之间的关系。学生们通过探索和实践,逐渐理解了除法的逆运算性质,即乘法是除法的基础。这样的学习过程,...