生成两个数字之间没有linQ c的数组#

时间:2015-10-09 07:46:54

标签: c# arrays linq

我不想生成一个int[],数字在500-1500之间,没有LINQ或lambda表达式,然后看看它是否相等除以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];
            }
            }

6 个答案:

答案 0 :(得分:2)

创建:

  // 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();

答案 1 :(得分:2)

我在这里解决方案:

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);

答案 2 :(得分:0)

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中的条件应该是int[1001]。或者,如果您想要所有数字从500到1500,那么i <= tal.Length和第一个for循环中的条件应为SELECT * FROM xy WHERE num = '135' ORDER BY column_name DESC LIMIT 5

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我会使用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];

答案 5 :(得分:0)

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

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);