在没有linQ c#的情况下生成两个数字之间的数组

本文关键字:两个 数组 之间 数字 linQ 情况下 | 更新日期: 2023-09-27 18:16:56

我不想在没有LINQ或lambda表达式的情况下生成数字在500-1500之间的int[],然后看看它是否等于3除以之间的数字,然后求和并计算和中的平均值。

如果没有LINQ或lambda表达式,我该怎么做。

这是一个C#控制台应用程序

到目前为止我已经尝试过了:

        int[] tal = new int[1500];
        for (int i = 500; i < tal.Length; i++)
        {
            tal[i] += i;
        }
        int summa = 0;
        for (int i = 0; i <= 1500; i++)
        {
            if (tal[i] % 3 == 0)
            {
                summa += tal[i];
            }
            }

在没有linQ c#的情况下生成两个数字之间的数组

创建:

  // inclusive
  int from = 500;
  // inclusive
  int to = 1000;
  int[] tal = new int[from - to + 1]; // both "from" and "to" are inclusive
  for (int i = 0; i < tal.Length; ++i)
    tal[i] = from + i;

求和/平均值:

  int summa = 0;
  int count = 0; 
  foreach (var v in tal)
    if (v % 3 == 0) {
      summa += v;
      count += 1;
    }
  Double average = ((Double)summa) / count;

仅供参考,Linq解决方案:

  var summa = Enumerable
    .Range(from, to - from + 1) // both "from" and "to" are inclusive
    .Where(item => item % 3 == 0)
    .Sum();
  var average = Enumerable
    .Range(from, to - from + 1) // both "from" and "to" are inclusive
    .Where(item => item % 3 == 0)
    .Average();

这里是我的解决方案:

const int from = 501, to = 1500;
const int n = (to - from)/3 + 1;
const int result = (from + to)*n/2;
Console.WriteLine(result);

它绝对不使用LINQ、lambdas甚至数组(因为这里不需要它们(或变量(所有const表达式都将在编译时求值(。你可能想减少它,所以结果程序将是:

Console.WriteLine((501 + 1500)*((1500 - 501)/3 + 1)/2);

甚至

Console.WriteLine(334167);

如果你需要一个平均值,那么n的值就会减少,你可以写:

const int from = 501, to = 1500;
const double result = (from + to)/2.0;
Console.WriteLine(result);
int[] tal = new int[1500];

这将初始化一个长度为1500的数组。

for (int i = 500; i < tal.Length; i++)

这将在数组中插入1000个数字(从500到1499(。

for (int i = 0; i <= 1500; i++)

这将遍历数组中的1501个数字。

因此,您的数组应该是int[1000],并且第二个循环中的条件是i < 1000。或者,如果您想要500到1500之间的所有数字,那么int[1001]和第一个for循环中的条件应该是i <= tal.Length

您不必创建1500长度的数组。因为您不需要第一个CCD_ 8元素。还可以使用计数器来计算第二个循环中完成的和数,然后取平均值。

int[] tal = new int[1000];
for (int i = 0; i < tal.Length; i++)
{
    tal[i] += i + 500; // 500 based number
}
int summa = 0;
int k = 0;
for (int i = 0; i < tal.Length; i++)
{
    if (tal[i] % 3 == 0)
    {
        summa += tal[i];
        k++; // count number of summed.
    }
}
double average = 0;
if(k != 0) // prevent division by zero
{
    average = (double)summa/k; // cast to double to hold precision.
}
Console.WriteLine(average);

我将使用一个List<int>,您可以在for循环中填充它。然后可以使用List<T>.ToArray(而不是LINQ(创建最终的int[]:

List<int> numbers = new List<int>();
decimal sum = 0;
for (int i = 500; i <= 1500; i++)
{
    bool divisibleBy3 = i % 3 == 0;
    if (divisibleBy3)
    {
        numbers.Add(i);
        sum += i;
    }
}
decimal average = 0m;
if (numbers.Count > 0)
    average = sum / numbers.Count;
int[] result = numbers.ToArray();

如果你不能使用任何.NET方法,你可以在一个循环中填充你的int[]

int[] result = new int[numbers.Count];
for (int i = 0; i < numbers.Count; i++)
    result[i] = numbers[i];

对于数组生成,可以使用int[] tal = Enumerable.Range(500, 1000).ToArray();。逻辑可以保持相同的