我不想生成一个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];
}
}
答案 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);