【发布时间】:2023-03-07 16:06:01
【问题描述】:
您好,我正在做这个数学游戏,在我的最后一个场景中,我做了很多重复的代码,但我不确定是否有办法简化它,我已经在下面链接了,所以可能会更老练程序员可能有一些更优雅的解决方案! 例如,我试图生成 (a[]b)²[]c[]d 之类的所有排列,其中括号将替换为 +、-、* 或 /。我一直在做的只是创建随机百分比 if 语句来选择特定版本,如“(a+b)²/cd” 是否有比我一直在做的更“蛮力”和可读性的方法?
if(UnityEngine.Random.Range(0,101)>50){
// 50% of being (a+b)²(c)+d
if(UnityEngine.Random.Range(0,101)>50){
ans = ((int) Mathf.Pow((float) a+ (float) b, 2))*c+d;
input.text = "("+a+"+"+b+")"+"²"+"("+c+")"+"+"+d+"=";
Debug.Log("Problem ID: 78");
// 50% of being (a+b)²(c)-d
} else {
ans = ((int) Mathf.Pow((float) a+ (float) b, 2))*c-d;
input.text = "("+a+"+"+b+")"+"²"+"("+c+")"+"-"+d+"=";
Debug.Log("Problem ID: 79");
}
// 50% of being (a-b)²(c)[]d
} else {
// 50% of being (a-b)²(c)+d
if(UnityEngine.Random.Range(0,101)>50){
ans = ((int) Mathf.Pow((float) a- (float) b, 2))*c+d;
input.text = "("+a+"-"+b+")"+"²"+"("+c+")"+"+"+d+"=";
Debug.Log("Problem ID: 80");
// 50% of being (a-b)²(c)-d
} else {
ans = ((int) Mathf.Pow((float) a- (float) b, 2))*c-d;
input.text = "("+a+"-"+b+")"+"²"+"("+c+")"+"-"+d+"=";
Debug.Log("Problem ID: 81");
}
(下面的Pastebin以获得更多上下文) https://pastebin.pl/view/d1bfb99e
【问题讨论】:
标签: c# math optimization permutation dry