我正在寻找的不是问题解决方案,但可能是更好的c#逻辑。
基本上,我有一个值,它是任何值{1,2,4}的总和。 然后我会做一些动作取决于这些值的降序 检查以下代码:
byte value = 7;//could be 1,2,3,4,5,6,7 which is the summation of any of those 3 numbers {1, 2, 4}
bool case1 = false, case2 = false, case3 = false;
if (value >= 4)
{
case1 = true;
value -= 4;
}
if (value >= 3)
{
case2 = true;
value -= 3;
}
if (value >= 1)
{
case3 = true;
value -= 1;
}
if (case3)
{
//do some action
}
if (case2)
{
//do some action
}
if (case1)
{
//do some action
}
请注意:总和中不会重复任何数字 这就是我用c#编写的内容,但这并不能让我对2k17中的代码逻辑感觉良好。
希望有人在任何数学运算中都有更好的逻辑! 提前谢谢。
答案 0 :(得分:0)
我认为您的原始代码是错误的,而第二个if
应该是if (value >= 2)
而不是if (value >= 3)
,但这不是重点。如果我理解你想要实现的目标,那么这个控制台应用程序应该有所帮助:
class Program
{
static void Main(string[] args)
{
int value = 7;
int copy = value; // only needed for the Console.WriteLine below
var allComponents = new[] { 4, 2, 1 };
var sumParts = new List<int>();
int i = 0;
while (i < allComponents.Length)
{
if (value >= allComponents[i])
{
value -= allComponents[i];
sumParts.Add(allComponents[i]); // or do some action whatever you need
}
i++;
}
Console.WriteLine("Value {0} is the sum of {1}", copy, string.Join(" + ", sumParts));
}
}
可能值(7,6,5,4,3,2,1)的输出:
Value 7 is the sum of 4 + 2 + 1
Value 6 is the sum of 4 + 2
Value 5 is the sum of 4 + 1
Value 4 is the sum of 4
Value 3 is the sum of 2 + 1
Value 2 is the sum of 2
Value 1 is the sum of 1
它遍历所有组件从最大到最小(4,2,1),检查当前组件是否大于或等于value
,如果是,则递减{{1当前组件并将当前组件添加到value
列表。
如果您可以从循环中的if内部调用逻辑,那么您甚至不需要sumParts
,只需在那里做任何事情。
这个解决方案与你的解决方案基本相同,但是在一个循环中而不是在彼此之后进行声明。
答案 1 :(得分:0)
(再次编辑...代码示例) 你可以使用枚举吗?而不是使用int?
public enum MyEnum
{
Nothing = 0,
One = 1,
Two = 2,
Four = 4,
Seven = 7
}
MyEnum seven = MyEnum.Seven;
if( (seven & MyEnum.Four) == MyEnum.Four)
{
Console.WriteLine("Four");
}
if((seven & MyEnum.Two) == MyEnum.Two)
{
Console.WriteLine("Two");
}
if((seven & MyEnum.One) == MyEnum.One)
{
Console.WriteLine("One");
}
上一个提示:位掩码,这里的示例很容易理解http://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators/