gpt4 book ai didi

c# - 在 Linq 中处理临时计算

转载 作者:太空狗 更新时间:2023-10-30 00:59:00 25 4
gpt4 key购买 nike

解决面试问题时

问题<我>一个六位数字需要用这样的方式找到,当它乘以一个介于 2 和 9 之间的整数时,当它的数字反转时得到原始的六位数字。

示例:

假设我乘以 219978 * 4 得到 879912 ,当反转 879912 时我将得到 219978。

我解决了它使用

for (long l = 100000; l < 999999; l++)
{
var num = l.ToString();

for (int i = 3; i < 9; i++)
{
var mul = l * i;
string str = mul.ToString();
char[] splitDigits = str.ToCharArray();
string reversedDigit =
new string(splitDigits.Reverse().ToArray());

if (reversedDigit.CompareTo(num) == 0)
{
Console.WriteLine("{0} * {1}= {2},
when multiplied {3} ", num, i, mul,reversedDigit);

}

}
}

最初的任务是使用 linq 来解决它。 例如,我在处理临时计算时有点困惑

当我使用

   var = from l in Enumerable.Range(100000,999999)
from i in Enumerable.Range(3,9)

在 linq 中处理 var num = l.ToString() 等临时计算的方法是什么。在 Linq 中完成它让我很困惑。感谢帮助。

最佳答案

你想要...

    // NOTE: buggy; see below
var qry = from l in Enumerable.Range(100000, 999999)
from i in Enumerable.Range(3, 9)
let s = l.ToString()
let t = (l * i).ToString()
where s.Reverse().SequenceEqual(t)
select new { l, i };

var a = qry.First();
Console.WriteLine("an answer...");
Console.WriteLine("{0} x {1} = {2}", a.l, a.i, a.l * a.i);

Console.WriteLine("all answers...");
foreach (var row in qry)
{
Console.WriteLine("{0} x {1} = {2}", row.l, row.i, row.l * row.i);
}

第一个答案(注意 9 的 inclusion 取自您的原始代码版本,但可能需要使用 Range(3,8) 代替):

109989 x 9 = 989901

优化版本(和正确范围):

    var qry =  from l in Enumerable.Range(100000, 999999 - 100000)
let s = l.ToString()
let sReversed = new string(s.Reverse().ToArray())
let wanted = int.Parse(sReversed)
from i in Enumerable.Range(3, 8 - 3)
where l * i == wanted
select new { l, i };

这减少了创建的字符串数量,使用整数相等性,并正确使用范围(Range 的第二个参数是count,而不是结束)。

关于c# - 在 Linq 中处理临时计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com