QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 9629|回复: 24
打印 上一主题 下一主题

[已经解决] 大家来练习1

[复制链接]
字体大小: 正常 放大

36

主题

7

听众

2050

积分

  • TA的每日心情

    2017-3-4 20:24
  • 签到天数: 31 天

    [LV.5]常住居民I

    社区QQ达人 邮箱绑定达人 新人进步奖 最具活力勋章 发帖功臣

    群组数学建模

    群组数学趣味、游戏、IQ等

    群组LINGO

    群组Latex研学群

    群组C 语言讨论组

    跳转到指定楼层
    1#
    发表于 2010-3-7 19:31 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    本帖最后由 为你奋斗 于 2010-3-10 21:12 编辑

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持1 反对反对0 微信微信
    为你奋斗!为你奋斗!
    mblank 实名认证       

    1

    主题

    3

    听众

    1259

    积分

    该用户从未签到

    自我介绍
    from neu ,do my best to learn more

    新人进步奖

    本帖最后由 mblank 于 2010-3-7 19:40 编辑

    做出来了。。用的 暴力~(n 的范围只定义在int)

    原理比较简单。。。

    设 从K一直加到(K+M)的和为n,直接用了暴力。。复杂度在 o(n^2)

    code :
    #include<iostream>
    using namespace std;
    int main()
    {
    int n;
    int m;
    int k;
    while(cin>>n)
    {
    bool none=true;
        for(k=1;k<=n/2;k++)
    {
      for(m=1;m<=n;m++)   
        {
         int temp;
         temp=(m+1)*k+m*(m+1)/2;
         if(temp==n)
         {
          none=false;
          for(int i=k;i<=k+m;i++)
           cout<<i<<" ";
             cout<<endl;
         }
         else if(temp>n)
         {
          break;
         }
        }
    }
    if(none)
      cout<<"NONE"<<endl;
    }
    return 0;
    }
    已有 1 人评分金币 收起 理由
    为你奋斗 + 6

    总评分: 金币 + 6   查看全部评分

    回复

    使用道具 举报

    36

    主题

    7

    听众

    2050

    积分

  • TA的每日心情

    2017-3-4 20:24
  • 签到天数: 31 天

    [LV.5]常住居民I

    社区QQ达人 邮箱绑定达人 新人进步奖 最具活力勋章 发帖功臣

    群组数学建模

    群组数学趣味、游戏、IQ等

    群组LINGO

    群组Latex研学群

    群组C 语言讨论组

    为你奋斗!为你奋斗!
    回复

    使用道具 举报

    闾山 实名认证       

    25

    主题

    8

    听众

    3005

    积分

    升级  33.5%

  • TA的每日心情
    难过
    2018-9-17 10:30
  • 签到天数: 387 天

    [LV.9]以坛为家II

    邮箱绑定达人 新人进步奖 发帖功臣

    群组数学建模

    真的假的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    回复

    使用道具 举报

    6601750        

    19

    主题

    4

    听众

    783

    积分

    Belief

    升级  45.75%

  • TA的每日心情
    开心
    2011-11-18 21:21
  • 签到天数: 2 天

    [LV.1]初来乍到

    新人进步奖

    以前做过
      写得不好 不要笑话啊。。。
    #include <stdio.h>
    #include<stdlib.h>
    #define Max 3000
    int a[Max];
    void main()
    {
            int i,j,b,n,m,sum;
            int c=0;
            printf("Enter:");
            scanf("%d",&n);
            b=n/2;
            a[0]=0;
            for(i=0;i<=b;i++)
            {
                    a[i]=i+1;
            }

            for(j=0;j<=b;j++)
            {
                  sum=0;
                  for(i=j;i<=b;i++)
                  {
                       sum=sum+a[i];
                       if(sum==n)
                       {
                             m=j;

                            for(m=j;m<=i;m++)
                             {
                               printf("%d",a[m]);
                             }
                              printf("\n");
                              c=1;
                       }
                  }
            }
            if(c==0)
            printf("NONE");
            getch();

    }
    已有 1 人评分金币 收起 理由
    为你奋斗 + 6

    总评分: 金币 + 6   查看全部评分

    回复

    使用道具 举报

    lxgjianmo 实名认证       

    0

    主题

    3

    听众

    172

    积分

    升级  36%

    该用户从未签到

    自我介绍
    乐观向上,有积极的态度

    新人进步奖

    #include <stdio.h>
    , P- I  J8 F+ q9 J. c( d, h$ n% m* H+ c#include<stdlib.h>
    / i) l/ ~; ]- a& ~- f#define Max 3000
    ' D5 C2 Z% Z) E6 q, @, X2 lint a[Max];, b7 D, m) q* e5 o# U, n
    void main()
    " C1 Y1 U  A' c{
    / v, ]  O; j; o+ h9 B* i6 }; R5 @        int i,j,b,n,m,sum;0 Q: |+ j$ X! J/ K
            int c=0;
    ; ~6 ^* F; \0 m! r- N! j+ n4 {+ a. M        printf("Enter:");( S+ a7 C. R+ U8 F  p! j
            scanf("%d",&n);
    ! f6 Q  h6 y4 q        b=n/2;
    / ], ^2 a# i/ E3 o! O5 f/ d5 w        a[0]=0;1 _4 {- w$ C3 ^7 D
            for(i=0;i<=b;i++)
    * o0 ~& f0 a: R' y! g; K) H        {
    / x& ~) `. [( I9 L) y                a[i]=i+1;
    ; y, G! V  d! [4 ^5 R; m        }
    % u+ V/ I/ f2 ~% c1 \8 k$ Q' t9 s4 N% z# a& k6 X6 Y5 A1 q1 }
            for(j=0;j<=b;j++)! x. n0 l* ?* o0 k
            {1 T& ?8 q0 t) N/ A, \
                  sum=0;, N: ^# s& `" v
                  for(i=j;i<=b;i++)% p. D* `, z& B) z$ R
                  {
    # G; o' I+ q1 n0 [+ h# a                   sum=sum+a[i];
    4 I0 |1 f! Z: }: o! e0 s8 a" i                   if(sum==n)
    # C, g4 ]( d2 |" y                   {
    , ]7 g1 e( _( r) g! s% R                         m=j;  `+ B1 Z4 ?- F) Z9 \. D1 u" x$ G9 N

    & w3 B: T# x; L5 i4 ~2 p8 ?+ w3 K                        for(m=j;m<=i;m++)
    - }* V. d1 ~* |7 o                         {
    9 o4 K  c$ w' c; h' F/ f                           printf("%d",a[m]);, ^* Y7 C% x* f
                             }* \4 O  ~. X9 |& c8 m; P- Q- b7 k& {
                              printf("\n");
    * b& M; _5 K- l1 W/ A" n                          c=1;
    ! m" Y; I9 r4 D+ x                   }! k0 l. R) R7 C, m& w
                  }* B% _; O. _, ^
            }& w( \3 r" T& ?
            if(c==0)
    ! |: q, I% B$ [' Z% z3 Z# \* y3 u7 D, I        printf("NONE");
    . L, U( f8 A( h# t, f  H* _  f        getch();  ^4 N: l& |. H  i: ~

    6 K, Q" {  v" ^}
    回复

    使用道具 举报

    dutdong 实名认证       

    1

    主题

    4

    听众

    674

    积分

    升级  18.5%

  • TA的每日心情
    开心
    2016-9-18 16:23
  • 签到天数: 104 天

    [LV.6]常住居民II

    自我介绍
    希望挑战自我,完善自我

    邮箱绑定达人 新人进步奖

    群组D题讨论群

    群组C题讨论群

    群组B题讨论群

    群组A题讨论群

    回复

    使用道具 举报

    mblank 实名认证       

    1

    主题

    3

    听众

    1259

    积分

    该用户从未签到

    自我介绍
    from neu ,do my best to learn more

    新人进步奖

    回复 3# 为你奋斗


        必须有~ 嘿嘿,结束ACM好久了,随手写了一个程序,只能得到正确结果,明天开始就准备考研复习了~ 栏目不错的说~ 祝愿版主越办越火吧~
    回复

    使用道具 举报

    6601750        

    19

    主题

    4

    听众

    783

    积分

    Belief

    升级  45.75%

  • TA的每日心情
    开心
    2011-11-18 21:21
  • 签到天数: 2 天

    [LV.1]初来乍到

    新人进步奖

    回复

    使用道具 举报

    HSinB 实名认证       

    0

    主题

    5

    听众

    1651

    积分

    升级  65.1%

  • TA的每日心情
    开心
    2012-2-9 17:19
  • 签到天数: 2 天

    [LV.1]初来乍到

    新人进步奖 发帖功臣

    本帖最后由 HSinB 于 2010-3-9 09:36 编辑

    算法简述:
    若某整数n0可表示为连续正整数之和,则可表示为(m1+m2)*(m2-m1+1)/2形式,其中m1,m2分别为连续整数序列首末项,(m2-m1+1)为项数,显然m1,m2一一对应。令n=n0*2,则(m1+m2)*(m2-m1+1)=n。由此得到下述2个约束条件:
    1 因m1必然小于m2,知m1取值范围为(1,n0/2向下取整;m2取值范围为(m1+1,n0/2向上取整)。
    2 又因m2-m1+1<=m1+m1,可知当n已知时,(m1+m2)*(m2-m1+1)式中两项取值范围:m1+m1>=sqrt(n);m2-m1+1<=sqrt(n)。
    因此,在已知m1前提下,m2取值范围可缩小为max(m1+1,sqrt(n)-m1)<=m2<=min(sqrt(n)+m-1,(n0/2)向上取整)。
    由此缩小搜索范围。

    程序:
    #include <stdio.h>
    #include <math.h>

    void main()
    {
    int m1,m2,a,b,n0,k,warn;
    float n,l,h;
    printf("input a integer:\n");
    /*输入待判定整数*/
    scanf("%d",&n0);
    /*warn为判定是否可表示为连续整数和的标识变量,初始为无可行解*/
    warn=1;
    n=2*n0;
    for(m1=1;m1<=n0/2;m1++)/*首项循环*/
    {

    /*确定末项下限*/
    l=sqrt(n)-m1;

    if(l<=m1)

    {

    l=m1+1;

    }

    /*确定末项上限*/

    h=sqrt(n)+m1-1;


    if(h>(n0+1)/2)

    {

    h=(n0+1)/2;

    }

    /*末项循环*/

    for(m2=l;m2<=h;m2++)

    {

    a=m1+m2;

    b=m2-m1+1;

    /*满足等式,标识变量重新赋值,输出结果*/

    if(a*b==n)

    {
                        warn=0;

    for(k=m1;k<=m2;k++)

    {

    printf("%d ",k);

    }

    printf("\n");

    printf("***************\n");break;

    }

    }

    }
    if(warn==1)

    /*无可行解,输出None*/

    printf("None");

    另:请教如何让程序在运行时首先显示printf中的字符串"input a integer“,而不是在输入整数并完成计算后显示?第一次用C写程序,困惑甚多啊~~~
    已有 1 人评分金币 收起 理由
    为你奋斗 + 5

    总评分: 金币 + 5   查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-11 06:58 , Processed in 0.584612 second(s), 108 queries .

    回顶部