| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1970 人关注过本帖
标题:[学习笔记]从循环到穷举~~
只看楼主 加入收藏
笔尖下的日子
Rank: 1
等 级:新手上路
帖 子:14
专家分:3
注 册:2013-4-22
收藏
得分:0 
我也要努力才行
2013-04-25 12:41
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
收藏
得分:0 
循环练习到此结束...开始看书了...
程序代码:
/*
从循环到穷举
练习题:哪些连续的自然数的和为1000
*/

/*
思考:
连续的自然数相加等于1000 : x + (x + 1) + (x + 2) + (x + 3) + (x + 4) + ... ... + (x + n) == 1000
假设5个数相加等于1000: 5 * x + 1 + 2 + 3 + 4 = 1000
推导出n个数相加等于1000: n * x + 1 + 2 + 3 + 4 + ... + (n - 1) = 1000

x = 1000 - ( 1 + 2 + 3 + ... + n-1) / n

n = 1000 - ( 1 + 2 + 3 + ... + n -1) / x
假设题目的连续的自然数是指1个以上的数字,由于 500 + 501 > 1000 ,
所以 x < 500

for(x = 0; x < 500; x++)
    for(n = 2; n <= 1000 - ( 1 + 2 + 3 + n - 1) / x; n++)
        if(n = 1000 - (1 + 2 + 3 +...+ n - 1) / x
            for(i = n; i >= 0; i--)
                printf x;
                x++;
*/

#include <stdio.h>

#define YQ 1000     //一千
#define WB 500      //第一个数字的最大上限
#define WS 50       //连续自然数的个数上限

int main(void)
{
    unsigned first, sum;    //起始数字和数字个数
    unsigned tmp;           //临时记录 n 个连续自然数的和
    short i;                  //循环变量

    for (first = 1; first < WB; first++)      //从 1 到 500 查找连续自然数的第一个数
    {
        for (sum = 2; sum < WS; sum++)        //从 2 个数开始查找共有几个连续数相加等于1000
        {
            tmp = 0;                    //清除上一次循环(1 + 2 + 3 + ... + n-1) 的值

            for(i = 0; i < sum; i++)      //计算(1 + 2 + 3 + ... + n-1)
                    tmp += i;

            if((YQ - tmp) / first == sum && (YQ - tmp) % first == 0)  //判断(1000 - (1+2+3+4+...+n-1)/first)的值
            {
                for(i = 1; i <= sum; i++)     //打印符合条件的连续自然数
                {
                    printf("%u ", first);
                    first++;
                }
                printf("\n");
            }
        }
    }

    return 0;
}
2013-04-25 12:51
qq23826868
Rank: 2
等 级:论坛游民
帖 子:57
专家分:94
注 册:2013-4-7
收藏
得分:0 
程序代码:
#include "stdio.h"
void main()
{
    int n,sum;
    n=1,sum=0;
    for(;n<=16;n++)
        sum=sum+n*n;
    printf("正方形个数=%d",sum);
}


我觉得这样会好点。。。
新手回答不好请勿怪。
2013-04-25 13:07
qq23826868
Rank: 2
等 级:论坛游民
帖 子:57
专家分:94
注 册:2013-4-7
收藏
得分:0 
回复 10楼 TonyDeng
为什么不是n<=16?
2013-04-25 13:09
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
以下是引用qq23826868在2013-4-25 13:09:38的发言:

为什么不是n<=16?

应为你没看仔细,图片中长为 16,宽为 12


[fly]存在即是合理[/fly]
2013-04-25 13:13
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
收藏
得分:0 
回复 13楼 qq23826868
不是 16 x 16啊..

是 16 x 12
2013-04-25 13:18
不才
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2013-4-13
收藏
得分:0 
我是新手,这样不是简单么,为什么要这么复杂
#include<stdio.h>
#define X 16
#define Y 21
main()
{
    int i,s=0,a,b,c;
    for(i=0;i<=X;i++)
      {a=X-i;
       b=Y-i;
       c=a*b;
       s=s+c;}
      
    printf("%d\n",s);
    return 0;  
}
2013-04-25 14:08
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
收藏
得分:0 
回复 17楼 不才
好吧,你的更简单,我不会嫉妒你的..

T版会推荐你去数学系
2013-04-25 14:21
不才
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2013-4-13
收藏
得分:0 
C真心不懂感觉老师都没怎么讲的,也罢也罢,我会努力学的
2013-04-25 14:24
qwe885167759
Rank: 4
等 级:业余侠客
威 望:5
帖 子:148
专家分:259
注 册:2013-3-12
收藏
得分:0 
好样的,祝贺你取得进步

我本楚狂人,凤歌笑孔丘
2013-04-25 17:34
快速回复:[学习笔记]从循环到穷举~~
数据加载中...
 
   



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

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