昨天晚上 在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 }