首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求程序运行总时间,不太懂解决方案

2014-01-13 
求程序运行总时间,不太懂刚刚看无意点进了那个什么英雄会,然后就去做了这道题《微软必应·英雄会第三届在线

求程序运行总时间,不太懂
刚刚看无意点进了那个什么英雄会,然后就去做了这道题
《微软必应·英雄会第三届在线编程大赛:几个bing?》
附上链接
http://hero.csdn.net/Question/Details?ID=215&ExamID=210
下面是我写出来的代码,提交后提示我程序运行总时间大于3S,最后挑战失败。
代码附上

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

public class Test 
{
   public static  long howmany(string s)
    {
        char[] charList = s.ToCharArray();
        List<int> b = new List<int>();
        List<int> i = new List<int>();
        List<int> n = new List<int>();
        List<int> g = new List<int>();
        for (int j = 0; j < charList.Length; j++)
        {
            if (charList[j] == 'b')
                b.Add(j + 1);
            else if (charList[j] == 'i')
                i.Add(j + 1);
            else if (charList[j] == 'n')
                n.Add(j + 1);
            else if (charList[j] == 'g')
                g.Add(j + 1);
        }
        long count = 0;
        for (int j = 0; j < b.Count; j++)
        {
            for (int k = 0; k < i.Count; k++)
            {
                if (i[k] > b[j])
                {
                    for (int m = 0; m < n.Count; m++)
                    {
                        if (n[m] > i[k])
                        {
                            for (int t = 0; t < g.Count; t++)
                            {
                                if (g[t] > n[m])
                                {
                                    count++;
                                }
                            }
                        }
                    }
                }
            }
        }
        long sum = count % 1000000007;  //对10^9 + 7取余
        return sum;
    }
    public static void Main()
    {
       Console.WriteLine(howmany("iinbinbing"));


    }
}




求大神来看一下程序总运行时间,不太懂。
[解决办法]
不懂。

我们开发中没有几个人,所以不能用专注这种东西的程序员,我们需要的是真正的系统开发程序员。

像这种抠“计算方法”的学生,应该去微软去养老。
[解决办法]
  Stopwatch sw = new Stopwatch();
            sw.Start();
            long a = howmany("iinbinbing");

            Console.WriteLine(a);
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);

一个Console.WriteLine 花了 2秒。。。你那个函数也用2秒
[解决办法]
using System;

public class Test
{
    private static char[] find = { 'b', 'i', 'n', 'g' };

    private static int foo(string s, int findindex)
    {
        int r = 0;
        int p1 = s.IndexOf(find[findindex]);
        if (findindex == 3)
        {
            for (int i = 0; i < s.Length; i++)
            { 
                if (s[i] == 'g') r++;
            }
            return r;
        }
        if (p1 >= 0)
        {
            int p2 = s.IndexOf(find[findindex], p1 + 1);
            r += foo(s.Substring(p1 + 1), findindex + 1);
            if (p2 >= 0)
            {
                r += foo(s.Substring(p2), findindex);
            }
        }
        return r;
    }
    public static int howmany(string s)
    {
        return foo(s, 0);
    }
    //start 提示:自动阅卷起始唯一标识,请勿删除或增加。 
    public static void Main()
    {
        Console.WriteLine(howmany("iinbinbing"));
    }
    //end //提示:自动阅卷结束唯一标识,请勿删除或增加。
}


有点苛刻,我也做不到。
[解决办法]
using System;

public class Test
{
    private static char[] find = { 'b', 'i', 'n', 'g' };

    private static int foo(string s, int findindex)
    {
        int r = 0;
        int p1 = s.IndexOf(find[findindex]);
        if (findindex == 3)
        {
            for (int i = 0; i < s.Length; i++)
            { 
                if (s[i] == 'g') r++;
            }
            return r;


        }
        if (p1 >= 0)
        {
            int p2 = s.IndexOf(find[findindex], p1 + 1);
            r += foo(s.Substring(p1 + 1), findindex + 1);
            if (p2 >= 0)
            {
                r += foo(s.Substring(p2), findindex);
            }
        }
        return r;
    }
    public static int howmany(string s)
    {
        return foo(s, 0);
    }
    //start 提示:自动阅卷起始唯一标识,请勿删除或增加。 
    public static void Main()
    {
        string s = "";
        Random r = new Random();
        for (int i = 0; i < 500; i++)
            s += find[r.Next(0, 4)];
        DateTime dt1 = DateTime.Now;
        Console.WriteLine(s);
        Console.WriteLine(howmany(s));
        Console.WriteLine(new TimeSpan(DateTime.Now.Ticks - dt1.Ticks).TotalSeconds);
    }
    //end //提示:自动阅卷结束唯一标识,请勿删除或增加。
}



确实有点超过。我的代码在500个字符下还可以应付。

gbbgbibgiggbiignigibgigbniginbinbigiibbbngggninnniibibnnbgbnngiiibgbinibgbngignb
gbniniibgibibingnnininbbgibbnnbiiggibgnbngbgibbnngigibgigiiibbiiiggbibnngigniigg
bnigbbgibiiniibninnnbbbnbnbbibgnnningnbigngbnbiiibbgniggngnnggbbngggbingnbnnibgg
iggbbbgigigggnngigigbiigibbnnbnibnbbbbgignbgigbgnnbinbggnbngginnninbingiggbninin
bigggbgbgiibibnigibbbgnbngnngbigngnninninnbbbggninnbiiiiggibnbbggiiingginninnibn
ggbinininigniiginibnnibiniigggnignigbnbngggbbigbgbgiinbinngbgninniggbgigbinnibii
nbbggibbigiigbniiiin
11192369
1.484375
Press any key to continue . . .

1.4秒,Pentium 4 2.6C 很烂的CPU。

热点排行