您的位置:首页 > 编程语言 > Java开发

ACM-韩信点兵Java

2017-09-19 20:50 381 查看


韩信点兵

时间限制:3000 ms  |  内存限制:65535 KB
难度:1

描述
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。

输入
输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7)。例如,输入:2 4 5
输出
输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:89

样例输入

2 1 6

样例输出

41
----------------***韩信点兵口诀原理***------------------------
1.能被5,7除尽数是35k,其中k=2,即70除3正好余1,70a 除3正好余a。

2.能被3,7除尽数是21k,其中k=1,即21除5正好余1,21b 除5正好余b。

3.能被3,5除尽数是15k,其中k=1,即15除7正好余1,15c 除7正好余c。

根据1可知 70a+21b+15c 除3正好余a。

根据2可知 70a+21b+15c 除5正好余b。

根据3可知 70a+21b+15c 除7正好余c。 
所以得出        (70a+21b+15c)%(3*5*7)为最小值,然后再判断最小值是否满足条件。

public class Main{

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
int res = (70*a+21*b+15*c)%(3*5*7);
if (res>10&&res<100) {
System.out.println(res);
}else {
System.out.println("No answer");
}
scanner.close();
}

}


注:韩信点兵口诀原理来源于网络......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: