![]() |
1
50
到目前为止,你得到了一些很好的答案,主要建议如下:
所以我要采取不同的策略。我知道你这样做是为了学习C,所以这可能有点相切。 真的,你让电脑工作得太辛苦了:)如果我们提前解决了一些问题,这会使任务更容易完成。 那么,3的倍数有多少小于1000?每3个进入1000-1,就有一个。
(这和表示 地板 部门,或者,在编程术语中, 整数 除法,删除余数)。 5的倍数有多少小于1000?
现在3的所有倍数加起来是多少,小于1000?
5的所有倍数之和小于1000?
有些3的倍数也是5的倍数。这是15的倍数。 因为这些都算在穆特身上 三 和多 五 (因此,总和 三 和和 五 )我们需要了解穆特 十五 和和 十五 避免数到两次。
所以问题的解决办法” find the sum of all the multiples of 3 or 5 below 1000 “那时
因此,如果我们愿意,我们可以直接实现这一点:
但我们可以做得更好。为了计算单个的和,我们有 Gauss's identity 表示从1到n的总和(即∑ i=1到n i)是n×(n+1)/2,所以:
(请注意,我们可以在这里使用正除法或整数除法-这并不重要,因为n或n+1中的一个必须被2整除) 现在这是一种简洁的方法,因为它意味着我们可以在不使用循环的情况下找到解决方案:
当然,既然我们已经走了这么远,我们就可以用手把事情搞得一团糟:
写一个更简单的程序:
|
![]() |
2
17
你可以改变你的假设:
别忘了用零初始化和,从一开始。 另外,将while条件更改为<1000。 |
![]() |
3
6
您最好使用for循环,并结合您的条件。 未测试:
|
![]() |
4
3
答案都很好,但对你学习C没有帮助。 你真正需要了解的是如何发现自己的错误。调试器可以帮助您,C中最强大的调试器称为“printf”。你想知道你的程序在做什么,而你的程序不是一个“黑匣子”。 你的程序已经打印了总数,可能是错误的,你想知道为什么。例如:
而不是
并将其保存到一个文本文件中,然后尝试了解出了什么问题。
|
![]() |
5
3
嗯,好吧,我大致可以看出你要去哪里,我想这件事唯一的问题是之前提到过的。我以前在那里做过这个问题,很明显你需要单步处理3和5的每一个倍数,然后求和。我是这样做的,而且它确实有效:
编辑:还要注意,它不是0到1000(包括0到1000),1000停在999,因为它是1000以下的最后一个数字,您已经用<1001来反驳它,这意味着您一直走到1000,这是5的倍数,意味着您的答案将比它应该的高1000。 |
![]() |
6
2
你还没有说计划应该做什么,或者你的问题是什么。这使得很难提供帮助。 估计,您真的应该将start和sum初始化为零,也许printf应该在循环之外。 |
![]() |
7
2
实际上,您需要一个调试器,只需单步执行代码,就可以看到它实际在做什么。您的基本问题是,控制流不会按您认为的方向发展,我将尝试解释您的代码的作用,而不是像其他人那样提供正确的代码。以下是发生的事情,一步一步(我已经编号了行):
你看到了吗?你好像觉得在第四行
|
![]() |
8
2
你忘了初始化变量, |
![]() |
9
1
您的代码的问题是您将“start”变量递增两次。这是因为有两个if..else语句。您需要的是if..else if..else语句,如下所示:
或者你可以更简洁地写如下:
这两种方法中的任何一种都适合你。 祝你好运! |
![]() |
10
0
下面是一个通用的解决方案,它可以处理任意数量的因素:
|
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 3 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 4 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 4 月前 |