2016-06-24 5 views
2

학생 이름과 평균 성적을 입력해야하는 간단한 프로그램을 작성한 다음 가장 높은 평균 성적과 그 사람이 속한 사람을 인쇄해야합니다. value가 배열에 있는지 찾는 방법에 대한 여러 주제가 있습니다. 내가 고군분투하는 것은 최대 평균 성적을 가진 학생이 1 명 이상일 경우해야 할 일이다. 그래서C# - 배열에 값이 나타나는 횟수를 확인하고 인덱스를 찾습니다.

 Console.WriteLine("Enter the overall count of students."); 


     int stuCount = Convert.ToInt32(Console.ReadLine()); 
     string[] name = new string[stuCount]; 
     double[] avg = new double[stuCount]; 

     for (int i = 0; i < stuCount; i++) 
     { 
      Console.WriteLine("Enter the name of student # {0}.", i + 1); 
      name[i] = Console.ReadLine(); 
      Console.WriteLine("Enter the average grade of {0}.", name[i]); 
      avg[i] = Convert.ToDouble(Console.ReadLine()); 
     } 

     // Finding the max average 
     double maxAvg = avg[0]; 
     for (int i = 1; i < stuCount; i++) 
     { 
      if (avg[i] > maxAvg) 
      { 
       maxAvg = avg[i]; 
      } 
     } 

     // Displaying the max average 
     Console.WriteLine("The highest average grade is {0}.", maxAvg); 

여러 개의 인덱스를 찾을 Array.IndexOf() 방법을 사용할 수 있습니다 : 여기

는 지금까지이 무엇입니까?

감사합니다.

+0

여러 인덱스를 찾으려면'StartIndex' 인수에'Array.IndexOf()'의 오버로드를 사용하십시오 : https://msdn.microsoft.com/en-us/ 라이브러리/3b2fz03t (v = vs.110) .aspx –

+1

여러 가지 방법으로 같은 문제를 다루고있는 SO에 관한 최근의 질문과 활발한 질문 - [SO link] (http://stackoverflow.com/questions/38006865/how-can -i-make-my-procedure-for-the-nth-most-frequent-element-in-a-ar/38008666 # 38008666) – pijemcolu

+0

배열이나 클래스 및 목록 만 사용할 수 있습니까? – Tinwor

답변

-1

.

Console.WriteLine("The highest average grade is {0}.", maxAvg); 

Console.WriteLine("The students with this average grade are"); 
     for (int i = 0; i < stuCount; i++) 
     { 
      if (avg[i] == maxAvg) 
      { 
       Console.WriteLine(name[i]); 
      } 
     } 
+0

걱정하지 마십시오. 하루 종일 나에게 일어난다. –

2

클래스를 사용하여 등급을 나타낼 것을 고려하십시오.

class Grade { 
    public String Name {get;set;} 
    public double Average {get;set;} 
} 

코드가 더 비슷할 수 있습니다. 당신은 최대 사람이있는 것을 확인하고 인덱스를 사용하여 스터드를 인쇄하려면 평균의 배열을 통해 다시 가장 높은 평균 단지 루프를 발견 한 후에

Console.WriteLine("Enter the overall count of students."); 

     int stuCount = Convert.ToInt32(Console.ReadLine());   

     List<Grade> allGrades = new List<Grade>(); 

     for (int i = 0; i < stuCount; i++) 
     { 
      Console.WriteLine("Enter the name of student # {0}.", i + 1); 
      var name = Console.ReadLine(); 
      Console.WriteLine("Enter the average grade of {0}.", name[i]); 
      var avg = Convert.ToDouble(Console.ReadLine()); 
      Grade current = new Grade(){ 
       Name = name, 
       Average = avg 
      }; 
      allGrades.Add(current); 
     } 

     // Finding the max average 
     double maxAvg = allGrades.Max(g => g.Average); 
     var highestGrades = allGrades.Where(g => g.Average == maxAvg); 

     Console.WriteLine("The following Student(s) have the highest average grade:"); 
     foreach(var grade in highestGrades){ 
       // Displaying the max average 
       Console.WriteLine("Student: {0}. Grade: {1}.", grade.Name, grade.Average); 
     } 
} 
0

또 다른 방법은 다음 List를 생성하고 for 사이클을 작성 개의 속성 (nameaverage grade)를 포함하는 클래스가 생성된다. 다음 단계는 order by descending이고 목록은 average grade이며 첫 번째 N 요소는 같음을 선택합니다. 그 다음에 간단히 결과를 출력 할 수 있습니다. ForEach

관련 문제