| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1581 人关注过本帖
标题:最简单的问题把我给搞迷了
只看楼主 加入收藏
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:24 
最简单的问题把我给搞迷了
问题是计算1-2+3-4+5-6+……-100;
规律一目了然,只是不知道怎么实现,首先不能用if,只能用while.
说是可以让定义的数(*-1),但是是负数还可以,但是如果是正数,该怎么办呀。
分数有限,知识无限,明白了这个问题,这点分数值了。
搜索更多相关主题的帖子: 一目了然 怎么办 知识 
2012-01-12 11:33
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:2 
int index = 100;
bool bl = false;
int sum = 0;
while(index){
  int i = bl?(index):(~index+1);
sum += i;
  bl = bl?false:true;
  index--;
}
2012-01-12 11:38
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:2 
程序代码:
int a=1,sum=0;
while(a<=100)
{
    sum=sum+(a%2==1?a:a*(-1));
    a++;
}
printf("%d\n",sum);

********多贴代码,少说空话*******
2012-01-12 11:39
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:1 
int i = 1;
int sum = 0;
while(i <= 100)
{
    sum += i;
    i *= -1;
    i++;
}

听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2012-01-12 11:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
呵呵,暈了,睡一覺就悟過來啦。

授人以渔,不授人以鱼。
2012-01-12 12:21
编程的乐趣
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:229
专家分:1027
注 册:2011-4-4
收藏
得分:1 
.
2012-01-12 12:30
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:3 
1、你想要的方法
程序代码:
int f(int n)
{
    int i, c, f;
    for(c = 0, f = i = 1; i <= n; c += i * f, i++, f = -f);
    return c;
}
2、实际该用的方法
程序代码:
int f(int n)
{
    return (n & 1) * n - n / 2;
}
3、用宏代替
#define f(n)    (((n)&1)*(n)-(n)/2)

重剑无锋,大巧不工
2012-01-12 13:01
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:2 
#include  <stdio.h>

int  main(void)

{
    int i = 1, sum = 0, flag = -1;

    while (i <= 100)

    {
        flag *= -1;

        sum += i++ * flag;
    }

    printf("%d\n", sum);

    return  0;
}

梅尚程荀
马谭杨奚







                                                       
2012-01-12 15:43
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 7楼 beyondyf
其实这个问题是我从这个问题上想出来的一个问题,原问题是:
计算1-1/2+1/3-1/4+……+1/99-1/100;
S1:sgin=1
S2: sum=1
S3: deno=2
S4: sign=(-1)*sign
S5: term=sign*(1/deno)
S6: sum=sum+term
S7: deno=deno+1
S8: 若deno<=100返回S4;否则算法结束。
我从这个问题想到的那个问题,我本来想如果那个问题想明白了,这个问题也就想明白了,
刚开始分母=2,然后分子*-1就成了-1,当前的值就是-1*(1/2)就是-1/2,
接着总数=总数加上当前值,也就是1+(-1/2)等价于1-1/2,分母=分母+1;接着判断条件不成立,返回S4
这时候的分子不再是原来的1了,已经再上一轮变成了-1,所以在S4那里 分子*(-1)=1;
再然后到S5,当前值=1*(1/3),总数=总数+当前值,也就是 +(1/3)。
今天终于想通了,原来再运行到S4那里的时候,分子已经不再是原来的1了,在上一轮就已经变成-1了,我迷茫了2天了,做梦都在想这个问题。
2012-01-12 19:44
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
原题不变,就按照楼上的题目分析,大家做下1-2+3-4+5-……+99-100,这个题目,散分了哦。
2012-01-12 19:49
快速回复:最简单的问题把我给搞迷了
数据加载中...
 
   



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

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