public override string GetAnswer() { try { string ans = "[Метод Кондорсе]\r\n"; for (int i = 0; i < CandidateCount; i++) { for (int j = i + 1; j < CandidateCount; j++) { ans += CompareAlter(i, j); } } ans += "Ответ: " + Result() + "\r\n\r\n"; return(ans); string CompareAlter(int X, int Y) { int CountVotes = ListVote.Sum(); int X_Votes = 0; for (int i = 0; i < ListAlt.Count; i++) { if (ListAlt[i].IndexOf(ALPHABET[X].ToString()) < ListAlt[i].IndexOf(ALPHABET[Y].ToString())) { X_Votes += ListVote[i]; } } char symbol; if (X_Votes > (CountVotes - X_Votes)) { symbol = '>'; ListScore[X]++; } else if (X_Votes < (CountVotes - X_Votes)) { symbol = '<'; ListScore[Y]++; } else { symbol = '='; } string s = ALPHABET[X] + " " + symbol + " " + ALPHABET[Y] + " : " + X_Votes + " " + symbol + " " + (CountVotes - X_Votes) + "\r\n"; return(s); } string Result() { List <int> list_temp = new List <int>(); for (int i = 0; i < ListScore.Count; i++) { list_temp.Add(ListScore[i]); } list_temp.Sort(); for (int i = 0; i < list_temp.Count; i++) { if (list_temp[i] > i) { return("Парадокс Кондорсе!"); } else if (i != 0) { if (list_temp[i] != list_temp[i - 1] && list_temp[i] != i) { return("Парадокс Кондорсе!"); } } } string s = null; int cnt = ListScore.Count; int max = ListScore.Max(); for (int i = 0; i < cnt; i++) { if (i != 0) { if (max == ListScore.Max()) { s += " = "; } else { s += " > "; } } s += ALPHABET[ListScore.IndexOf(ListScore.Max())]; max = ListScore.Max(); ListScore[ListScore.IndexOf(max)] = -1; } return(s); } } catch { return(null); } }
public override string GetAnswer() { try { string ans = "[Метод Копленда]\r\n"; for (int i = 0; i < CandidateCount; i++) { for (int j = 0; j < CandidateCount; j++) { if (i != j) { CompareAlter(i, j); } } ans += ALPHABET[i] + " = " + ListScore[i] + "\r\n"; } ans += "Ответ: " + Answer() + "\r\n\r\n"; return(ans); bool CompareAlter(int X, int Y) { int sum = 0; int CountVotes = ListVote.Sum(); for (int i = 0; i < ListAlt.Count; i++) { if (ListAlt[i].IndexOf(ALPHABET[X].ToString()) < ListAlt[i].IndexOf(ALPHABET[Y].ToString())) { sum += ListVote[i]; } } if (sum > (CountVotes - sum)) { ListScore[X]++; } else if (sum < (CountVotes - sum)) { ListScore[X]--; } return(true); } string Answer() { string s = null; int cnt = ListScore.Count; int max = ListScore.Max(); int min = ListScore.Min(); for (int i = 0; i < cnt; i++) { if (i != 0) { if (max == ListScore.Max()) { s += " = "; } else { s += " > "; } } s += ALPHABET[ListScore.IndexOf(ListScore.Max())]; max = ListScore.Max(); ListScore[ListScore.IndexOf(max)] = min - 1; } return(s); } } catch { return(null); } }