我已经为我的编程课程做了一些工作,虽然我已经解决了。任何感兴趣的人的一点信息:我的任务是从一系列分数中找到竞争者的分数(例如,int []分数= 4,5,6,7,8,9)。但是,当将其余分数加在一起时,我不得包括最高和最低值(例如,得分= 5 + 6 + 7 + 8(不包括4和9))。
当我们被允许使用linq时,我的解决方案如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Scoring {
class Program {
static void Main(string[] args) {
int[] scores = { 4, 7, 9, 3, 8, 6 };
remove_duplicates(scores);
console_text(scores);
ExitProgram();
}
static void remove_duplicates(int[] scores) { //removes duplicat values from array
var pScores = scores.Distinct().ToArray();
}
static int result(int[] pScores) { //calculates results by removing max and min scores, then adding the remaining.
return pScores.Sum() - pScores.Max() - pScores.Min();
}
static void console_text(int[] pScores) { //renders the text in the consol window
int final_score = result(pScores);
Console.Write("Competitor your scores were " );
foreach (int i in pScores) {
Console.Write(" " + i);
}
Console.WriteLine("\r\n" + " and your score was " + final_score);
}
static void ExitProgram() {
Console.Write("\n\nPress any key to exit program: ");
Console.ReadKey();
}//end ExitProgram
}
}
所以我以为我已经完成了,但现在我已收到并发电子邮件说明:
"不能使用任何system.array方法,也不能使用Linq的任何功能或您可能发现的任何其他库类#34;
这让我有些失落和困惑,任何帮助都会受到赞赏。
由于
答案 0 :(得分:0)
这是一个选项。唯一不太清楚的是天气,如果有两个相等的值,也是最小值或最大值,它们应该被移除两个或仅一个最大值和一个最小值。我只删除了一分钟和一个最大值:
int[] arr = new int[] { 2, 2, 3, 4, 5, 6, 6 };
int Lowest = arr[0];
int Highest = arr[0];
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
if (Lowest > arr[i])
{
Lowest = arr[i];
}
if (Highest < arr[i])
{
Highest = arr[i];
}
sum += arr[i];
}
sum -= (Lowest + Highest);
Console.WriteLine("The sum withot the highest and lowest score is : {0}", sum);
如果您要删除所有重复的最小和最大分数,请在总结最终分数之前添加此分数:
int[] arrOfHighest = new int[arr.Length];
int[] arrOfLowest = new int[arr.Length];
int minCounter = 0;
int maxCounter = 0;
for (int i = 0; i < arr.Length; i++)
{
if (Lowest == arr[i])
{
arrOfLowest[minCounter] = arr[i];
minCounter++;
}
if (Highest == arr[i])
{
arrOfHighest[maxCounter] = arr[i];
maxCounter++;
}
}
int sumLoewst = 0;
for (int i = 0; i < arrOfLowest.Length; i++)
{
sumLoewst += arrOfLowest[i];
}
int sumHighest = 0;
for (int i = 0; i < arrOfHighest.Length; i++)
{
sumHighest += arrOfHighest[i];
}
sum -= (sumLoewst + sumHighest);
所以最后的触摸基于附加信息。由于您希望最小值和最大值仅在上面的代码中添加一次 - sum -= (sumLoewst + sumHighest);
在此添加之后:
sum -= (sumLoewst + sumHighest);
sum += (Highest + Lowest);
这样,无论它们出现在数组中的次数如何,您都会将所有其他值相加。只有一个MAX
和一个MIN
值添加到总和中。