Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2501256
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2011-05-09 11:51:42

    伟大的马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人,女人,小孩。他们在一家饭馆中吃饭,共花费50先令。如果每个男人吃饭要花3先令,每个女人要花2先令,每个小孩要花1先令,问男人,女人,小孩各多少人?
    我们遇到这种问题,一般都是采用穷举法进行操作,我们可以假设男人有x人,女人有y人,小孩有z人。我们很快可以列出如下的数学式子:
    3x+2y+z = 50; x+y+z = 30;
    通过三重循环,找出合适的答案,编写代码如下:
  1. #include <stdio.h>

  2. void marx()
  3. {
  4.   int x,y,z;
  5.   for(x=1; x<30; x++)
  6.     for(y=1; y<30; y++)
  7.       for(z=1; z<30; z++)
  8.     if(3*x+2*y+z == 50 && x+y+z == 30)
  9.           printf("%5d %5d %5d\n",x,y,z);
  10. }

  11. int main(int argc, char *argv[])
  12. {
  13.   printf("the solution of marx's topic\n");
  14.   printf("man woman children\n");
  15.   marx();
  16.   return 0;
  17. }
程序执行结果如下:
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ gcc 6.10.c
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out 
the solution of marx's topic
man    woman   children
    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

阅读(7012) | 评论(2) | 转发(0) |
0

上一篇:vfork()函数的使用

下一篇:渔夫捕鱼问题

给主人留下些什么吧!~~

chengxiaopeng2011-05-16 08:47:16

xdsnet: 算法可以有一个小改进,因为是穷举法,能够减少可能的数量在规模比较大的时候还是很可观的,其实很简单,外层数据决定了内层循环的范围,所以简单添加两个限定条.....
考虑了一下,您思考的算法要比我的好,谢谢您。

xdsnet2011-05-13 13:41:07

算法可以有一个小改进,因为是穷举法,能够减少可能的数量在规模比较大的时候还是很可观的,其实很简单,外层数据决定了内层循环的范围,所以简单添加两个限定条件可以极大的减少不必要的计算。
void marx()
{
int x,y,z,tmpy,tmpz;
for(x=1; x<30; x++)
    {
     tmpy=30-x;
     for(y=1; y<tmpy; y++)
           {
           tmpz=30-x-y;
           for(z=1;