在没有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];
}
}
创建:
// 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();
。逻辑可以保持相同的