/// <summary> /// 遞等式計算通用處理 /// </summary> /// <param name="type">題型</param> /// <param name="expressFormat">計算表達式</param> /// <param name="getArguments">參數處理邏輯</param> /// <param name="formulas">計算式作成</param> private void CleverStartegy(TopicType type, string expressFormat, Func <int[]> getArguments, IList <RecursionEquationFormula> formulas) { // 當前反推判定次數(一次推算內次數累加) int defeated = 0; RecursionEquationFormula RecursionEquation = new RecursionEquationFormula { Type = type, ConfixFormulas = new List <Formula>(), Answer = new List <int>() }; while (1 == 1) { // 如果大於三次則認為此題無法作成繼續下一題 if (defeated == INVERSE_NUMBER) { RecursionEquation = null; break; } int[] factors = getArguments(); if (factors == null) { defeated++; continue; } StringBuilder express = new StringBuilder(); var answer = factors[3]; express.AppendFormat(CultureInfo.CurrentCulture, expressFormat, factors[0], factors[1], factors[2]); // 計算式推導 var calc = new ExpressArithmeticUtil(); if (!calc.IsResult(express.ToString(), out int result)) { defeated++; continue; } if (result != answer) { defeated++; continue; } // 加入推導出計算式集合 calc.Formulas.ToList().ForEach(f => RecursionEquation.ConfixFormulas.Add(f)); RecursionEquation.Answer.Add(answer); defeated = 0; break; } if (RecursionEquation != null) { formulas.Add(RecursionEquation); } }
/// <summary> /// 遞等式計算[A+B+C] /// </summary> /// <param name="formula"> 計算式 </param> /// <returns> </returns> private string CleverA(RecursionEquationFormula formula) { StringBuilder html = new StringBuilder(); html.AppendFormat("{0} {1} {2} {3} {4}", formula.ConfixFormulas[0].LeftParameter, formula.ConfixFormulas[0].Sign.ToOperationUnicode(), formula.ConfixFormulas[0].RightParameter, formula.ConfixFormulas[1].Sign.ToOperationUnicode(), formula.ConfixFormulas[1].RightParameter); return(html.ToString()); }
/// <summary> /// 遞等式計算[A-B-C] /// </summary> /// <param name="formula"> 計算式 </param> /// <returns> </returns> private string CleverH(RecursionEquationFormula formula) { return(CleverA(formula)); }