You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组评分下的学生糖果分配问题求解(C#代码调试)

学生糖果分配问题的C#代码修复方案

问题描述

给定N名学生列表及对应评分列表,规则为评分高于邻居的学生获得的糖果数需多于邻居。

示例

  • 输入数据:
    • 3
    • John
    • Michael
    • Sam
    • 9
    • 10
    • 8
  • 输出结果:
    • John 1
    • Michael 3
    • Sam 1

原代码存在的问题

  1. 程序结构不合法:C#代码必须包含在命名空间和类中,原代码直接写执行块,无法编译。
  2. 输入逻辑错误:获取成绩时错误调用ConvertList(FillArray(number)),导致将成绩读取为字符串后转成int,实际应该直接调用GetGrades读取成绩。
  3. 方法返回值不匹配:CountCandies方法返回总糖果数(int),但PrintResult需要每个学生的糖果数数组(int[]),类型不兼容。
  4. 方法调用参数错误:调用CountCandies时只传了学生数量,未传入成绩数组,且语法错误。
  5. HTML转义字符未还原:代码中的>、&&、"需替换为实际的C#运算符和引号。
  6. 输出逻辑不当: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]}");
            }
        }
    }
}

修复点说明

  1. 补充了合法的C#程序结构:添加了命名空间和Program类,将执行逻辑放在Main方法中。
  2. 修正输入逻辑:用GetGrades直接读取成绩数组,替代错误的ConvertList(FillArray(number))。
  3. 修改CountCandies返回值:从返回总糖果数改为返回每个学生的糖果数数组,匹配PrintResult的参数需求。
  4. 修正方法调用:调用CountCandies时传入成绩数组和学生数量,接收返回的糖果数组。
  5. 还原HTML转义字符:将&gt;替换为>,&amp;&amp;替换为&&,&quot;替换为"。
  6. 优化输出逻辑:直接拼接学生名和糖果数输出,不修改原学生名字数组。

内容的提问来源于stack exchange,提问作者Bogdan Dragoş

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:45:49