zoukankan      html  css  js  c++  java
  • CSDN 分糖果算法的思路和求助

    昨天晚上 在csdn上做了一道分糖果的题目,我自个测的是没有问题,但是提交答案后,老失败,提示

    你的程序正常运行并输出了结果,但是答案错误
    你的程序输出结果与测试数据中的输出结果不符

    我先把自个思路说一下,再把我的代码贴出来,你们帮忙看看,哪里出了问题,或者有更好的思路分享下。

    题目是这样的:地址:http://student.csdn.net/mcs/programming_challenges 第二道题目

    有n个小朋友站成一排(编号从0到n-1),每个小朋友有一个rating值,存放在ratings数组中。老师需要给他们分配糖果,每个小朋友至少需要一颗糖果,对于任意相邻的两个小朋友i和i+1,rating值大的必须比rating值小的分配的糖果多(rating相同的没必要分配一样多的糖果)。
    请计算最少需要多少颗糖果,才能完成上述分配。
    输入格式:
    多组数据,每组数据第一行是一个正整数n。
    接下来n行,每行有1个正整数,表示每个小朋友的rating值。所有整数都不超过100000。
    输出格式:
    每组数据一行,包括一个正整数,表示做少需要的糖果数。

    我的思路是 从0开始遍历小朋友,每一次求出当前小朋友可以拿到的最少糖果数,每一次比对前后位置;

    前面的位置比对一次就可以了,若大于前面小朋友的rating值,则当前应该得到的糖果数为上一位小朋友得到的糖果数+1,若小于等于前面小朋友的rating值,则自动将应得糖果数变为1;

    设置往后比对应得糖果数为1的临时变量,然后开始往后面比对,如果后面小朋友的rating值,小于当前小朋友的rating值,则当前小朋友应得糖果数的临时变量+1,继续比对后面小朋友,如果是递减,则不断+1,直到递减结束;

    比对该临时变量和往前比对应得糖果数,取二者的最大值,即为当前小朋友应得最少糖果数。

    这样求出每次小朋友应得最少糖果数,依次相加即可得到最少糖果数。

    具体代码如下:

     1         static void Main(string[] args)
     2         {
     3             Console.WriteLine("输入n跳出循环,或者其他字符开始游戏");
     4             while (Console.ReadLine() != "n")
     5             {
     6                 GetMin();
     7                 Console.WriteLine("输入n跳出循环,或者其他字符继续游戏");
     8             }
     9 
    10         }
    11         static void GetMin()
    12         {
    13             //  Console.WriteLine("请输入整数");
    14 
    15             string input = Console.ReadLine();
    16             int inputNum;
    17             while (!int.TryParse(input, out inputNum))
    18             {
    19                 // Console.WriteLine("请输入整数");
    20                 input = Console.ReadLine();
    21             }
    22             if (inputNum == 0)
    23             {
    24                 Console.WriteLine("0");
    25                 return;
    26             }
    27 
    28 
    29             int[] arys = new int[inputNum];
    30             //Random rm=new Random();
    31             //for (int i = 0; i < inputNum; i++)
    32             //{
    33             //    arys[i] = rm.Next(1, 15);
    34             //    Console.Write(arys[i]+" ");
    35             //}
    36             //Console.WriteLine();
    37 
    38             int tmp;
    39             for (int i = 0; i < inputNum; i++)
    40             {
    41                 input = Console.ReadLine();
    42                 while (!int.TryParse(input, out tmp) || tmp > 100000 || tmp <= 0)
    43                 {
    44                     Console.WriteLine("请输入不超过100000的正整数");
    45                     input = Console.ReadLine();
    46                 }
    47                 arys[i] = tmp;
    48             }
    49 
    50             int sum = 0;
    51             int num = 1;
    52             int j;
    53             //遍历每个小朋友
    54             for (int i = 0; i < arys.Length; i++)
    55             {
    56                 j = i;
    57                 //往前比对 求出应得最少糖果数
    58                 if (j >= 1 && arys[j] > arys[j - 1])
    59                 {
    60                     num++;
    61                 }
    62                 else
    63                 {
    64                     num = 1;
    65                 }
    66                 //开始往后比对,求出往后比对应得最少糖果数
    67                 int next = 1;
    68                 while (j < arys.Length - 1 && arys[j] > arys[j + 1])
    69                 {
    70                     j++;
    71                     next++;
    72                 }
    73                 //比对 往前比对和往后比对的结果 取二者中最大值 作为应得最少糖果数
    74                 num = num > next ? num : next;
    75                 //Console.WriteLine("num:" + num);
    76                 sum += num;
    77             }
    78             Console.WriteLine("最少应得糖果数" + sum);
    79         }
    View Code
  • 相关阅读:
    html禁止手机页面放大缩小
    <httpProtocol/>配置http协议头
    C# 并行编程 之 并发集合 (.Net Framework 4.0)(转)
    JavaScript随机排序算法1
    用户消息处理方式
    后台单用户在线,简单处理
    使用 Intel HAXM 为 Android 模拟器加速,媲美真机(转)
    解决Android SDK Manager下载太慢问题(转)
    如何正确并完全安装Visual Studio 2015企业版本?(转)
    C# XML流操作简单实例
  • 原文地址:https://www.cnblogs.com/flowwind/p/3950904.html
Copyright © 2011-2022 走看看