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         }

时间: 2024-08-05 21:22:17

CSDN 分糖果算法的思路和求助的相关文章

蓝桥-分糖果(算法训练)

1 /* 2 蓝桥-分糖果 3 测试通过 4 时间:2015-9-22 5 6 问题描述 7 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 8 9 每个小朋友都把自己的糖果分一半给左手边的孩子. 10 11 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数. 12 13 反复进行这个游戏,直到所有小朋友的糖果数都相同为止. 14 15 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果. 16 输入格式 17 程序首先读入一个整数N(

【蓝桥杯】PREV-32 分糖果

题目链接:http://lx.lanqiao.org/problem.page?gpid=T124 历届试题 分糖果 时间限制:1.0s   内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子. 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数. 反复进行这个游戏,直到所有小朋友的糖果数都相同为止. 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果. 输入格

1503140001-蓝桥杯-历届试题 分糖果

历届试题 分糖果 时间限制:1.0s   内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子. 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数. 反复进行这个游戏,直到所有小朋友的糖果数都相同为止. 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果. 输入格式 程序首先读入一个整数N(2<N<100),表示小朋友的人数. 接着是一行用空格分开的N个偶数(

分糖果

分糖果 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 18   Accepted Submission(s) : 3 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 童年的我们将和朋友分享美好的事物作为自己的快乐.这天,C小朋友得到了

HNUSTOJ-1639 分糖果(几何)

1639: 分糖果 时间限制: 1 Sec  内存限制: 128 MB提交: 261  解决: 118[提交][状态][讨论版] 题目描述 为了实验室的发展,吴大大采购了一箱零食O(∩_∩)O~~ 在吴大大取快递的时候,实验室已经已经默默地聚集了一堆吃货,准备抢劫他,为了避免发生由一袋零食引发的血案,同时也是为了体现我们实验室的和谐,在实验室的N个人达成了一个协议:等吴大大一回来,大家就包围他!但是每个人必须保证距离吴大大1m,并且相邻两人间的距离相等. 但是实验室的N个人都不知道怎么站更加合适

C语言 &#183; 分糖果

历届试题 分糖果 时间限制:1.0s   内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子. 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数. 反复进行这个游戏,直到所有小朋友的糖果数都相同为止. 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果. 输入格式 程序首先读入一个整数N(2<N<100),表示小朋友的人数. 接着是一行用空格分开的N个偶数(

分冶算法思想

1.分冶算法思想是将一个计算复杂的问题分为规模较小,计算简单的问题,,然后综合各个小问题得到最终问题的答案. 2.分冶算法的执行过程 对于一个对魔为N的问题,若该问题可以容易的解决,则直接解决,否则执行下面的步骤. 将该分解为M个规模较小的子问题,子问题相互独立,并且与原问题形式相同. 递归的解这些问题, 然后,将各子问题的姐合并得到原问题的解. 3.分冶算法例子 java实现: package com.sjx.test1;import java.util.Scanner; public cla

蓝桥杯 - 分糖果 (模拟~)

历届试题 分糖果 时间限制:1.0s   内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子. 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数. 反复进行这个游戏,直到所有小朋友的糖果数都相同为止. 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果. 输入格式 程序首先读入一个整数N(2<N<100),表示小朋友的人数. 接着是一行用空格分开的N个偶数(

hunnu11543:小明的烦恼——分糖果

Problem description   小明在班里一直是个非常公正的孩子.这点同学和老师都非常清楚,这不,老师每周都会从家里带来一些糖果.然后叫小明把糖果分给其它小朋友,但这个班里的同学都有一个非常特别的性格,就是他们仅仅喜欢偶数.对于糖果也一样,所以小明在分糖果时也必需要保证这一点,即使每一个同学分的糖果数量不一样.都是奇怪的是,小明有时候并不可以合格的分糖果,这让他大为苦恼.害怕别的同学会不再信任他(虽然其它同学不会这么想).所以他想请你帮帮他.在每次老师把糖果给他时,就帮他推断出糖果能