龙空技术网

C++小案例:如何用枚举法编程解小学奥数题

二狗的随笔 108

前言:

目前我们对“枚举法c语言例题”大致比较关怀,各位老铁们都想要学习一些“枚举法c语言例题”的相关文章。那么小编同时在网摘上汇集了一些有关“枚举法c语言例题””的相关资讯,希望我们能喜欢,兄弟们一起来了解一下吧!

什么是枚举法?

枚举法是基于逐个尝试答案的一种问题求解策略。

由于计算机是很擅长重复计算的,我们可以很容易的用C++编程来应用枚举法。

下面笔者就举2道小学奥数题做例子吧。

题目1:

现有1分、2分、5分硬币各四枚,

用其中一些硬币支付2角3分,

一共有多少种不同的支付方法?

程序源代码:

#include <iostream>using namespace std;int main (){// 1cent,2cent,5cent, 0 ~ 4// 1*1cent + 2*2cent + 5*5cent =23 for (int x=0 ; x< 5 ; ++x){    for (int y=0; y < 5; ++y ) {     for (int z=0; z < 5; ++z ) {       if (1 * x + 2 * y + z * 5 ==23 ) {       cout << "1cent X " << x << " + 2cent X " << y << " + 5cent X " << z << endl;     }   } } } return 0 ;}

测试结果:

1cent X 0 + 2cent X 4 + 5cent X 31cent X 1 + 2cent X 1 + 5cent X 41cent X 2 + 2cent X 3 + 5cent X 31cent X 3 + 2cent X 0 + 5cent X 41cent X 4 + 2cent X 2 + 5cent X 3

题目2:

有8张卡片,上面分别写着自然数1至8,

从中取出3张,使3张卡片上的数字之和为9,

问有多少种不同的取法?

程序源代码:

include <iostream>using namespace std;int main (){// x y z i, 1 ~ 8// find x + y + z =9 for (int x=1 ; x< 9 ; ++x){   for (int y=1; y < 9; ++y ) {     for (int z=1; z < 9; ++z ) {       if (x + y + z == 9 && (x<y) && (x<z) && (y<z) ) {        cout << "x= " << x << " " << "y= " << y << " z= " << z << endl;      }   } } } return 0 ;}

测试结果:

x= 1 y= 2 z= 6x= 1 y= 3 z= 5x= 2 y= 3 z= 4

标签: #枚举法c语言例题