数组评分下的学生糖果分配问题求解(C#代码调试)
学生糖果分配问题的C#代码修复方案
问题描述
给定N名学生列表及对应评分列表,规则为评分高于邻居的学生获得的糖果数需多于邻居。
示例
- 输入数据:
- 3
- John
- Michael
- Sam
- 9
- 10
- 8
- 输出结果:
- John 1
- Michael 3
- Sam 1
原代码存在的问题
- 程序结构不合法:C#代码必须包含在命名空间和类中,原代码直接写执行块,无法编译。
- 输入逻辑错误:获取成绩时错误调用
ConvertList(FillArray(number)),导致将成绩读取为字符串后转成int,实际应该直接调用GetGrades读取成绩。 - 方法返回值不匹配:
CountCandies方法返回总糖果数(int),但PrintResult需要每个学生的糖果数数组(int[]),类型不兼容。 - 方法调用参数错误:调用
CountCandies时只传了学生数量,未传入成绩数组,且语法错误。 - HTML转义字符未还原:代码中的
>、&&、"需替换为实际的C#运算符和引号。 - 输出逻辑不当:
PrintResult中直接修改原学生名字数组,易引发意外问题。
修复后的完整代码
using System; namespace CandyDistribution { class Program { static void Main(string[] args) { int number = Convert.ToInt32(Console.ReadLine()); string[] studentsList = FillArray(number); int[] studentsGrades = GetGrades(number); int[] candiesPerStudent = CountCandies(studentsGrades, number); PrintResult(studentsList, candiesPerStudent); } static string[] FillArray(int number) { string[] result = new string[number]; for (int i = 0; i < number; i++) { result[i] = Console.ReadLine(); } return result; } static int[] GetGrades(int number) { int[] result = new int[number]; for (int i = 0; i < number; i++) { result[i] = Convert.ToInt32(Console.ReadLine()); } return result; } static int[] CountCandies(int[] arr, int number) { int[] ans = new int[number]; // 初始化每个学生至少1颗糖果 for (int i = 0; i < number; i++) { ans[i] = 1; } // 从左到右遍历,处理右侧评分更高的情况 for (int i = 0; i < number - 1; i++) { if (arr[i + 1] > arr[i]) { ans[i + 1] = ans[i] + 1; } } // 从右到左遍历,处理左侧评分更高的情况,确保满足规则 for (int i = number - 2; i >= 0; i--) { if (arr[i] > arr[i + 1] && ans[i] <= ans[i + 1]) { ans[i] = ans[i + 1] + 1; } } return ans; } static void PrintResult(string[] studentNames, int[] candies) { for (int i = 0; i < studentNames.Length; i++) { Console.WriteLine($"{studentNames[i]} {candies[i]}"); } } } }
修复点说明
- 补充了合法的C#程序结构:添加了命名空间和
Program类,将执行逻辑放在Main方法中。 - 修正输入逻辑:用
GetGrades直接读取成绩数组,替代错误的ConvertList(FillArray(number))。 - 修改
CountCandies返回值:从返回总糖果数改为返回每个学生的糖果数数组,匹配PrintResult的参数需求。 - 修正方法调用:调用
CountCandies时传入成绩数组和学生数量,接收返回的糖果数组。 - 还原HTML转义字符:将
>替换为>,&&替换为&&,"替换为"。 - 优化输出逻辑:直接拼接学生名和糖果数输出,不修改原学生名字数组。
内容的提问来源于stack exchange,提问作者Bogdan Dragoş
相关产品推荐
相关产品推荐

