如何计算偶数和奇数之和?C#

如何计算偶数和奇数之和?C#,c#,C#,当用户输入数字时,例如3和7,程序会将中间的所有数字与用户输入的数字相加。现在我需要让它只在数字之间加上偶数和赔率。这就是我到目前为止所做的: static void Exercise1() { int min; int max; int sum = 0; int odd = 0; int even = 0; Console.WriteLine("Enter minimum integer:

当用户输入数字时,例如3和7,程序会将中间的所有数字与用户输入的数字相加。现在我需要让它只在数字之间加上偶数和赔率。这就是我到目前为止所做的:

static void Exercise1()
    {
        int min;
        int max;
        int sum = 0;
        int odd = 0;
        int even = 0;

        Console.WriteLine("Enter minimum integer: ");
        min = int.Parse(Console.ReadLine());
        Console.WriteLine("Enter maximum integer: ");
        max = int.Parse(Console.ReadLine());
       //Sum of all
        Console.Write("All: ");
         for (int x = min; x <= max; x++)
            {
                Console.Write(min);
                min++;
                Console.Write(" + ");
                sum += x;
            }
         Console.Write("= ");
         Console.Write(sum + "\n");

        //Odd Numbers
         Console.Write("Odd: ");
         for (int x = min; x <= max; x++)
         {
             if (min % 2 != 0)
             {
                 Console.Write(min);
                 min++;
                 Console.Write(" + ");
                 odd += x;
             }

         }
         Console.Write("= ");
         Console.Write(odd + "\n");

        //Even Numbers
         Console.Write("Even: ");
         for (int x = min; x <= max; x++)
         {

             if (min % 2 == 0)
             {
                 Console.Write(min);
                 min++;
                 Console.Write(" + ");
                 even += x;
             }   

         }
         Console.Write("= ");
         Console.Write(even + "\n");

        }
static void Exercise1()
{
int-min;
int max;
整数和=0;
int奇数=0;
int偶数=0;
Console.WriteLine(“输入最小整数:”);
min=int.Parse(Console.ReadLine());
Console.WriteLine(“输入最大整数:”);
max=int.Parse(Console.ReadLine());
//总和
控制台。写(“全部:”;

对于(int x=min;x问题在于您混淆了
x
min
的角色
min
是由用户输入的,并作为方法的起点;您不应该更改它。但是,在
循环的
每次迭代期间,您都会更改
min
。因此,首先,删除
m在+++
中,从所有三个
for
循环。
x
是一个变量,它会随着求和而变化。因此,不要将
min
的值写入console(该值应该是常量,您实际上是在试图找出
x
的值是什么…因此,将
控制台。将
的最小值写入
控制台。写入(x)

同时更改您的
if
-语句

 if (min % 2 != 0)


您可以为
-循环(和其他)刷上
通过阅读或观看来控制语句。

你在循环中做
min++
,这意味着
min
不是它应该做的。有时做
++min
并没有
x
是一种合理的微观优化,但前提是你不再需要该值

一旦找到奇数(或偶数),您可以通过跳过每个循环中的
x+=2
来加快速度,但如果有一个循环,速度会更快:

int sum = 0;
int odd = 0;
int even = 0;
for (int x = min; x <= max; x++)
{
    sum += x;
    if (x % 2 == 0)
        even += x;
    else
        odd += x;
}
如果
min
-1024
max
8980
,这将在速度上产生很大的差异,因为您只需进行此计算,就可以得到
39799890
,而不必循环使用10005个不同的值

类似地,如果找到最小偶数(
minEven=min%2==0?min:min+1
)和最大偶数(
maxEven=max%2==0?max:max-1
),则可以找到具有以下各项的偶数之和:

int sumEven = ((maxEven - minEven) / 2 + 1) * (maxEven + minEven) / 2;
事实上,同样的公式也适用于奇数:

int sumOdd = ((maxOdd - minOdd) / 2 + 1) * (maxOdd + minOdd) / 2;

在这里,根本不需要做任何循环,您的Θ(n)方法可以被Θ(1)方法所取代。

这里有一个值得一看的方法:

static void Exercise1()
{
    Console.WriteLine("Enter minimum integer: ");
    int min = int.Parse(Console.ReadLine());
    Console.WriteLine("Enter maximum integer: ");
    int max = int.Parse(Console.ReadLine());

    IEnumerable<int> all = Enumerable.Range(min, max - min + 1);
    IEnumerable<int> odds = all.Where(n => n % 2 == 1);
    IEnumerable<int> evens = all.Where(n => n % 2 == 0);

    Console.WriteLine(String.Format("All: {0} = {1}", String.Join(" + ", all), all.Sum()));
    Console.WriteLine(String.Format("Odd: {0} = {1}", String.Join(" + ", odds), odds.Sum()));
    Console.WriteLine(String.Format("Even: {0} = {1}", String.Join(" + ", evens), evens.Sum()));
}
static void Exercise1()
{
Console.WriteLine(“输入最小整数:”);
int min=int.Parse(Console.ReadLine());
Console.WriteLine(“输入最大整数:”);
int max=int.Parse(Console.ReadLine());
IEnumerable all=可枚举范围(最小值,最大值-最小值+1);
IEnumerable赔率=all.Where(n=>n%2==1);
IEnumerable evens=all.Where(n=>n%2==0);
WriteLine(String.Format(“All:{0}={1}”、String.Join(“+”,All)、All.Sum());
WriteLine(String.Format(“奇数:{0}={1}”、String.Join(“+”,赔率)、赔率.Sum());
WriteLine(String.Format(“偶数:{0}={1}”、String.Join(“+”,evens)、evens.Sum());
}

这件事应该给你一些东西。

Dude,非常感谢你。我一直在尝试这么久。不客气!如果它解决了这个问题,请考虑接受答案,并且一定要检查这些资源。我想它们会帮助你在前进的时候处理循环结构。(公式的一般形式是,对于以相同速率增加的任何序列,总和为
N*(first+last)/2
were
N
是序列中的元素数)。我个人喜欢这种方法,而且效率更高。我认为OP的真正问题源于对
for
循环控制结构的误解。尽管如此,这确实解决了当前的问题。干得好!@AustinD我在第一句话中确实解决了for循环的问题和效率低下在使用实际代码中使用的恒定时间方法之前,应该先做三个循环,而不是一个循环,因为理解循环为什么不起作用对于一般编程理解来说确实是最重要的。对不起,我的意思更多的是作为一种恭维,并向OP重申核心问题。我以为你的答案是e太棒了!啊,该死的评论中给出的小空间。我只是想说,出于同样的原因,虽然我总是想在可能的情况下采用单一的计算方法,但查询应该明确地关注于理解为什么循环不起作用,以及如何编写好的循环。循环对编程语言来说是必不可少的ke C#,找到一种方法来避免它们并得到更快的答案,这种情况很少出现。你处理奇数和偶数的方法几乎完全相同。这是一个标志,你应该将它们拉到一个带有一两个参数的函数中。
int sumOdd = ((maxOdd - minOdd) / 2 + 1) * (maxOdd + minOdd) / 2;
static void Exercise1()
{
    Console.WriteLine("Enter minimum integer: ");
    int min = int.Parse(Console.ReadLine());
    Console.WriteLine("Enter maximum integer: ");
    int max = int.Parse(Console.ReadLine());

    IEnumerable<int> all = Enumerable.Range(min, max - min + 1);
    IEnumerable<int> odds = all.Where(n => n % 2 == 1);
    IEnumerable<int> evens = all.Where(n => n % 2 == 0);

    Console.WriteLine(String.Format("All: {0} = {1}", String.Join(" + ", all), all.Sum()));
    Console.WriteLine(String.Format("Odd: {0} = {1}", String.Join(" + ", odds), odds.Sum()));
    Console.WriteLine(String.Format("Even: {0} = {1}", String.Join(" + ", evens), evens.Sum()));
}