| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3538 人关注过本帖
标题:一道程序题目 循环次数越少越好
只看楼主 加入收藏
yuxiang8200
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-25
收藏
得分:0 
#include <stdio.h>
void transform()
{
    int x,y,z,sum,loop = 0 ,doloop = 0;
    for(x = 1 ; x < 8 ; x++ )
    {
        for(y = 1 ; y < (30-x) ; y++)
        {
            for(z = 1 ; z < (30-x-y) ; z ++)
            {
                doloop++;
                sum = 50*x + 20*y + 10*z + 5*(30-x-y-z);
                if(sum == 500)
                {
                    printf("50:%d 20:%d 10:%d 5:%d\n",x,y,z,30-x-y-z);
                    loop++;
                }
            }
        }
    }
    printf("LOOP:%d\n",loop);
    printf("DOLOOP:%d\n",doloop);
}
int main()
{
    transform();
    return 0;
}
2008-11-03 13:03
yuxiang8200
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-25
收藏
得分:0 
以上仅供楼主参考,循环次数为2114次,还有共有37种方法!
不知可否?
2008-11-03 13:05
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
貌似某人只循环了140次……
2008-11-03 13:20
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
其实就是数学上的一点点优化,140次还是太多了,限制一个条件还可以少掉50次循环。

#include<stdio.h>
int main()
{
    int nCnt = 0, nLoop=0;
    for (int i=1; i<8; ++i)
    {
        for (int j=1; j<(97-10*i)/4; ++j)  ////////////here
        {
            int m = (100-i*10-j*4);
            int n = 30-i-j;
            if (m>n && 2*n-m>0)
            {
                printf("%d %d %d %d\n", i, j, m-n, 2*n-m);
                ++nCnt;
            }
            ++nLoop;
        }
    }
    printf("Loop = %d\n", nLoop);
    printf("Total= %d\n", nCnt);
    return 0;
}
2008-11-03 14:01
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
Loop = 89
Total= 37
2008-11-03 14:01
zyhfbim1a9
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-3-15
收藏
得分:0 
强贴
2008-11-03 15:32
hai1044088
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-30
收藏
得分:0 
dddd
main()
{  int a,b,c,d,count;
for(a=1;a<8;a++)
 {for(b=1;b<=20;b++)
   {c=70-9*a-3*b;
    if(c<0)countinue;
   d=30-a-b-c;
    if(d<0)cotinue;
   count+=1;
  printf("a=%d,b=%d,c=%d,d=%d,count=%d",a,,b,c,d,count);
}
}
}

[[it] 本帖最后由 hai1044088 于 2008-11-3 20:05 编辑 [/it]]
2008-11-03 20:00
hai1044088
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-30
收藏
得分:0 
dd
循环77次。41种
2008-11-03 20:14
快速回复:一道程序题目 循环次数越少越好
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017290 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved