前言
百僧分馍出自于我国明代著名数学家程大位所著的《算法统宗》,感兴趣的可以了解一下。
程大位https://baike.baidu.com/item/%E7%A8%8B%E5%A4%A7%E4%BD%8D/685133
《算法统宗》 https://baike.baidu.com/item/%E7%AE%97%E6%B3%95%E7%BB%9F%E5%AE%97?fromModule=lemma_search-box
原题
一百馒头一百僧,大僧三个更无争,小僧三人分一个,大小和尚各几丁?
这道题大意思大概是:有100个和尚分100只馒头,正好分完。如果大和尚一人分3只,小和尚3人分一只,试问大、小和尚各有几人?
代码思路
这道题我们可以使用常用算法之一——模拟来做这道题。
双重for循环,看一下以下条件是否成立:i * 3 + j / 3 == 100 && i + j == 100,成立就可以输出答案了。如果有问题,就在评论区问我。
还有一种方法特别简单,想知道的私信!
代码实现
三种方法。
//第一种方法
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 100; i++) //遍历100次 (i表示大和尚的数量)
for (int j = 1; j <= 100; j++) //遍历100次(j表示小和尚的数量)
if (i * 3 + j / 3 == 100 && i + j == 100) { //当找到答案时执行下列代码
cout << "大和尚有" << i << "个\n";
cout << "小和尚有" << j << "个\n";
return 0;
}
}
//第二种方法
#include <iostream>
using namespace std;
int main() {
const int n = 100; //定义常量
for (int i = 1; i <= n; i++) //i表示大和尚的数量
for (int j = 1; j <= n; j++) //j表示大和尚的数量
if (i * 3 + j / 3 == n && i + j == n) {
cout << "大和尚有" << i << "个\n";
cout << "小和尚有" << j << "个\n";
return 0;
}
}
//第三种方法
#include <iostream>
using namespace std;
int main() {
const int n = 100; //定义常量
for (int i = 1; i <= n; i++) //只需遍历一次
if (i * 3 + (n - i) / 3 == 100) {
cout << "大和尚有" << i << "个\n";
cout << "小和尚有" << n - i << "个\n";
return 0;
}
}
下一题:以碗知僧https://blog.csdn.net/NOIP1ding_c/article/details/145050784?spm=1001.2014.3001.5502