【问题标题】:Adding numbers from 1 to N in C#C#中从1到N的数字相加
【发布时间】:2012-10-15 03:10:22
【问题描述】:

我正在用 C# 编写代码并尝试将数字 1 和 N 之间的所有数字相加,N 是在文本框中输入的数字。我正在这样做,至少尝试这样做,方法是将它放入一个 while 循环中。

我之前在 2 个文本框之间添加了所有数字,但由于某种原因,我让自己发疯了,无法弄清楚这一点。我是初级程序员,所以请温柔。

任何帮助将不胜感激。

编辑: 我尝试过的六千件事之一。我认为这让我陷入了无限循环?

       private void btnAddAll_Click(object sender, EventArgs e)
       {
           int n;
           int count = 0;
           int answer = 0;

           n = int.Parse(txtNum.Text);

           count = n;

           while (count >= 1)
           {
               answer = answer + count;
               count++;
           }
               lstShow.Items.Add("Sum = " + answer);
               lstShow.Text = answer.ToString();
       }

【问题讨论】:

  • 我们在为你做功课吗?
  • 呃,不。我正在做这个作为家庭作业,但我不想要答案。我在上一个问题中指定了这一点,因为我知道我永远不会那样学习。我刚刚在这里坐了至少半个小时,试图弄清楚这一点。只是寻找指针。
  • 如果您提供一些代码来显示您尝试过的内容和无效的内容,您更有可能获得更完整的答案。在一个明显的家庭作业问题上没有代码不会导致太多的答案
  • 我编辑了我的问题并添加了它。就像我说的,我不是在寻找答案。我是一个初级程序员,老实说,我还不知道自己在做什么。
  • 我偶然发现了a good youtube video,它谈到了这个确切的主题。讲师谈到使用递归来解决问题。 (讲座是用C语言的,但一般的编程思想都有)

标签: c# while-loop


【解决方案1】:

为什么不用高斯公式。 (N*(N+1))/2

private void btnAddAll_Click(object sender, EventArgs e)
{
     int n, answer;  
     n = int.Parse(txtNum.Text);
     answer = (n*(n+1))/2;
     lstShow.Items.Add("Sum = " + answer);
     lstShow.Text = answer.ToString();
}

【讨论】:

  • +1 这个萌。 Console.WriteLine(((N*(N+1))/2).ToString());
【解决方案2】:

如果您将++ 更改为--,它应该可以按照您的意愿工作。

   int n;
   int count = 0;
   int answer = 0;

   n = 3;

   count = n;

   while (count >= 1)
   {
       answer = answer + count;
       count--; // here was the error
   }

   Console.WriteLine (answer);

输出:6

此外,您可以使用 Enumerable.RangeEnumerable.Sum 而不是 while 循环(可能超出家庭作业的预期范围,但了解其中的内容很有用)。 /p>

answer =  Enumerable.Range(1, n).Sum();

【讨论】:

  • 这可能是一个愚蠢的问题,但为了学习,我为什么要使用它?它有效,我只是好奇。顺便谢谢。
  • 对不起,我的意思是那个 --。我应该更清楚,但我从上面阅读了一条评论并弄清楚了。
  • 别担心 - 只要不要放弃,它会变得更容易 - 与我在学校时的学习相比,有这样的东西来获得帮助是一个很好的优势:)
  • 还要注意count-- 只不过是count = count - 1 的快捷方式
【解决方案3】:

您的编辑:您应该减少计数.. 另一个编辑,看来我需要解释更多: 递减是指--。 post 或 pre 减量运算符将值减 1。

如果 count 不断增加 1,则永远不会满足 count >=1。您需要将 count 减少到 1.. 因此 count--;

另外我建议您使用TryParse(string,out int) ; 或至少将Parse 调用包装在try catch block 中。

这是一个伪代码中的指针:

GetInput From User
TryParse Input
If Between 1 and N
Declare sum = 1;

for i to N-1 
   sum+=i; 

/* if you don't want to use the for loop
  while i < N 
  sum+=i;
  inc i; */
Print sum

【讨论】:

  • 如果“between”表示“(1..N) 除了边界数字”,那么你应该从 2 开始,而不是 1。
【解决方案4】:

调试是任何程序员的一项重要技能。 Visual Studio 中有一些很好的工具可以帮助调试。

当您卡住时调试代码的一个好方法是使用“断点”并单步执行代码。

选择您希望代码停止的行(例如n = int.Parse(txtNum.Text);)并按 F9 - 这将在该行添加一个断点。

现在,当您运行程序时,它将在断点处停止。如果按 F11,您可以一次“单步执行”一行代码。执行此操作时,您可以将鼠标悬停在变量上以查看其值。

如果你这样做,你会很快在你的代码中找到问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-18
    • 2021-12-09
    • 2013-06-11
    • 2018-08-11
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多