解决方案 »

  1.   


        程序干什么你可以看编程挑战栏,我用vs测过暂时没发现问题,我发帖的目的是把我做的编程挑战题拿出来供大家参看,属于技术炫耀,所谓的“欢迎指正漏洞”是类似于出书作者前言的“疏漏难免,请批评指正。” 纯属自我谦虚罢了,难道我还直接说,“编程挑战题3+1我不用1小时搞定,代码公开供大家学习欣赏”吗?积极参与要鼓励,技术炫耀也值得鼓励,不过建议你,
    1、要点出那些值得学习的地方,而不是让读者花费时间去猜测。
    2、不要假设每个人都有读心术,最好介绍你的题目是什么,从那里来。另外:
    1、你的输入输出有问题(最后一个ReadLine)。
    2、你的程序不能基本正确(比如输入2, 5 1)。
    2、你的程序效率有很大的改进空间。
      

  2.   


        程序干什么你可以看编程挑战栏,我用vs测过暂时没发现问题,我发帖的目的是把我做的编程挑战题拿出来供大家参看,属于技术炫耀,所谓的“欢迎指正漏洞”是类似于出书作者前言的“疏漏难免,请批评指正。” 纯属自我谦虚罢了,难道我还直接说,“编程挑战题3+1我不用1小时搞定,代码公开供大家学习欣赏”吗?积极参与要鼓励,技术炫耀也值得鼓励,不过建议你,
    1、要点出那些值得学习的地方,而不是让读者花费时间去猜测。
    2、不要假设每个人都有读心术,最好介绍你的题目是什么,从那里来。另外:
    1、你的输入输出有问题(最后一个ReadLine)。
    2、你的程序不能基本正确(比如输入2, 5 1)。
    2、你的程序效率有很大的改进空间。哦 以后注意了。
      

  3.   

        感谢gomoku指出(2 ,5 1)的输出错误,现在把修正代码贴出。
    -3+1发布公司:
    有 效 期:
    赛    区:
    CSDN 
    2014-04-09至2015-04-09
    北京
    难 度 等 级:
    答 题 时 长:
    编程语言要求:120分钟
    C C++ Java C# 
    题目详情
    有一个数列,所有的数都是非负整数,你可以进行如下方式进行一次操作(注意一次完整的操作必须先后完成如下两个步骤): (1) 任选一个不小于3的数,把它减少3。 (2) 任选一个数把它增加1。 请问,最多能够操作多少次? 输入格式: 多组数据,每组数据第一行是一个正整数n,表示数列中数的个数。(1<=n<=20000) 第二行包含n个空格分隔的非负整数,每个整数不超过1000000。 输出格式: 对每组数据输出一行,表示最多可以进行的操作次数。 答题说明输入样例 1 10 2 10 11 输出样例: 4 10 
    我的实现代码
    namespace ConsoleApplication1
    {
        using System;
        using System.Collections.Generic;
        using System.Text;    class Program
        {
            private static void fn(string[] s)
            {
                int n = 0;
                if (s.Length == 1)
                {
                    n = Convert.ToInt32(s[0]);
                    if (n >= 3)
                    {
                        if (n % 2 != 0)
                        {
                            cs += (n - 1) / 2;
                        }
                        else
                        {
                            cs += (n - 2) / 2;
                        }
                    }                Console.WriteLine(cs);
                }
                else
                {
                   
                    for (int i = 0; i < s.Length; i++)
                    {
                         n  = Convert.ToInt32(s[i]);
                         if (n >= 3)
                         {
                             break;
                         }
                         else
                         {
                             if (i == s.Length - 1)
                             {
                                 Console.WriteLine(cs);
                                 return;
                             }
                         }
                    }                string[] s2 = new string[s.Length - 1];
                    int indx = -1;
                    for (int i = 0; i < s.Length; i++)
                    {
                       n  = Convert.ToInt32(s[i]);
                       if (n < 3)
                       {
                           continue;
                       }
                       else
                       {
                           if (n % 2 != 0)
                           {
                               cs += (n - 1) / 2;
                               indx = i;
                               break;
                           }
                           else
                           {
                               if (i == s.Length - 1)
                               {
                                   cs += (n - 2) / 2;
                                   indx = i;
                                   break;
                               }
                           }
                       }
                    }                if (indx != -1)
                    {
                        int k = 0;
                        for (int i = 0; i < s.Length; i++)
                        {
                            if (indx != i)
                            {
                                s2[k] = s[i];
                                k++;
                            }
                        }
                    }                for (int i = 0; i < s2.Length; i++)
                    {
                        n = Convert.ToInt32(s2[i]);
                        if (n>1&&n % 2 == 0)
                        {
                            s2[i] = (Convert.ToInt32(s2[i]) + 1).ToString();
                            fn(s2);
                            return;
                        }
                        else
                        {
                            if (i == s2.Length - 1)
                            {
                                goto l;
                            }
                        }
                    }            l:
                    for (int i = 0; i < s2.Length; i++)
                    {
                        n = Convert.ToInt32(s2[i]);
                        if (n > 1)
                        {
                            s2[i] = (Convert.ToInt32(s2[i]) + 1).ToString();
                            fn(s2);
                            return;
                        }
                        else
                        {
                            if (i == s2.Length - 1)
                            {
                                s2[0] = (Convert.ToInt32(s2[0]) + 1).ToString();
                                fn(s2);
                            }
                        }                }
                }
            }        static int cs = 0;
            static void Main(string[] args)
            {
                cs = 0;
                string s1 = Console.ReadLine();
                string[] s2 = Console.ReadLine().Split(" ".ToCharArray());
                fn(s2);           // Console.ReadLine();
            }
        }
    }