免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1274 | 回复: 6
打印 上一主题 下一主题

[C] C语言的一道新手小题,高人指点一下!  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-02 20:57 |只看该作者 |倒序浏览
求所有两数积得2048中,两数相加的和是最小的,请问,这样编是不是最好最简单的,高人指点
#include <stdio.h>;

int a,b,c=0,d,e;
main(void)
{
    a=1;d=2049;
    while(a<=204
{
    e=d;
    if(2048%a==0)
    {
    b=2048/a; c=a+b;
    }
    if(c<=e)
    d=c;
   
    a++;
    }
    printf("%d",e);
}

论坛徽章:
0
2 [报告]
发表于 2005-08-02 21:29 |只看该作者

C语言的一道新手小题,高人指点一下!

2的11次方等于2048
所以2的5次方乘以2的6次方=2048
所以最小的是2的5次方+2的6次方=32+64=96
所以你的算法肯定不是最好的
对于别的数,你也应该从该数的平方根开始循环,如果能整除那么两数和就是最小,如果不能整除那么然后每次减1再去除,直到能够整除

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-08-02 21:46 |只看该作者

C语言的一道新手小题,高人指点一下!

  1. #include <stdio.h>;
  2. #include <math.h>;


  3. int main()
  4. {
  5.     int mid=(unsigned int)sqrt(2048);
  6.     for(;2048%mid!=0;mid--)
  7.     ;
  8.     printf("min: %d\t,%d\n",mid,2048/mid);
  9.     return 0;
  10. }
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-08-02 21:47 |只看该作者

C语言的一道新手小题,高人指点一下!

在UNIX 下编译连接的时候 加个 -lm就行了.

论坛徽章:
0
5 [报告]
发表于 2005-08-02 21:50 |只看该作者

C语言的一道新手小题,高人指点一下!

呵呵,mq110你也闲得没事作啊
唉, 偶还有几个文件要打,先下了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-08-02 21:58 |只看该作者

C语言的一道新手小题,高人指点一下!

原帖由 "luojiannx" 发表:
呵呵,mq110你也闲得没事作啊
唉, 偶还有几个文件要打,先下了


您 慢走.

论坛徽章:
0
7 [报告]
发表于 2005-08-03 09:24 |只看该作者

C语言的一道新手小题,高人指点一下!

服了,,,mq110   好热心的说!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP