这篇文章讲述的是算法初级部分的马克思手稿中的数学问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
马克思手稿中有一道趣味数学问题:有30个人,其中男人、女人和小孩,他们在同一家饭馆吃饭,总共花费了50先令。已知每个男人吃饭需要花3先令,每个女人吃饭需要花2先令,每个小孩吃饭需要花1先令,请编程求出男人、女人和小孩各有几人。
算法分析
假设男人有man个人,女人有woman个人,小孩有child个人,满足以下条件
man+woman+child==30
3*man+2*moman+child*1==50
确定取值范围 man:0~16
woman:0~25
child:0~50
只需使用两层循环判定所满足条件即可
代码实现
package mathematics;
public class Q10_MarxManuscript {
/**
* 问题描述:马克思手稿中有一道趣味数学问题:有30个人,其中男人、女人和小孩,他们在
* 同一家饭馆吃饭,总共花费了50先令。已知每个男人吃饭需要花3先令,每个女人
* 吃饭需要花2先令,每个小孩吃饭需要花1先令,请编程求出男人、女人和小孩各
* 有几人。
*
* 算法分析:假设男人有man个人,女人有woman个人,小孩有child个人,满足以下条件
* man+woman+child==30
* 3*man+2*moman+child*1==50
* 确定取值范围 man:0~16
* woman:0~25
* child:0~50
* 只需使用两层循环判定所满足条件即可
*/
public static void main(String[] args) {
/*初始化人数*/
int man , woman ,child ;
System.out.println("满足条件的情况有:");
int num = 0;
/*循环判定男人、女人、小孩是否满足条件,穷举*/
for(man=0 ; man<=16 ; man++)
for(woman=0 ; woman<=25 ;woman++){
child = 30-man-woman ;
if(3*man+2*woman+1*child == 50){
/*输出满足条件的结果*/
System.out.println("男人:"+man+" 女人"+woman+" 小孩:"+child);
num++ ;
}
}
System.out.println("共"+num+"种");
}
}
样例输出
满足条件的情况有:
男人:0 女人20 小孩:10
男人:1 女人18 小孩:11
男人:2 女人16 小孩:12
男人:3 女人14 小孩:13
男人:4 女人12 小孩:14
男人:5 女人10 小孩:15
男人:6 女人8 小孩:16
男人:7 女人6 小孩:17
男人:8 女人4 小孩:18
男人:9 女人2 小孩:19
男人:10 女人0 小孩:20
共11种