实现如下功能:
当传入参数string a = "1";时for (int i = 0; i < a.Length; i++)
    sum += i;
当传入参数string a = "12";时for (int i = 0; j < a.Length; i++)
    for (int j = 0; j < i; j++)
        sum += (i + j);当传入参数string a = "123";
for (int i = 0; j < a.Length; i++)
    for (int j = 0; j < i; j++)
        for (int k = 0; k < j; k++)
             sum += (i + j + k);假设string a ="123456..."依次类推...设计一个方法:
static int fun(string a)
{
  int sum = 0;
  //在此写代码
  return sum;
}求解注释位置的代码:)

解决方案 »

  1.   

    烟幕弹
    static int fun(string a)
    {
      int sum = 0;
      for(int i=0;i<a.Length;i++)
      {
          sum +=i;
      }
      return sum;
    }
      

  2.   

    0>1>2>3>4....>a.Length-1,满足条件的只有一种情况,就是0+1+2+3+...+a.Length-1
      

  3.   

     回复人:Bote_China() ( 五级(中级)) 信誉:100  2007-07-21 22:12:34  得分:0

    0>1>2>3>4....>a.Length-1,满足条件的只有一种情况,就是0+1+2+3+...+a.Length-1
    ---------------------------------------
    搞笑吗?当传入参数string a = "123";
    for (int i = 0; j < a.Length; i++)
    for (int j = 0; j < i; j++)
    for (int k = 0; k < j; k++)
    sum += (i + j + k);输出:sum = 18
      

  4.   

    for (int i = 0; j < a.Length; i++)
    for (int j = 0; j < i; j++)
    for (int k = 0; k < j; k++)
    sum += (i + j + k);
    这个是对的还是错的??
      

  5.   

    我看了下要用到数学的知识
    最后总结的公式如下
    f(1) = 0;
    f(n) = 2的(n-1)次方*(n-1) + 2*f(n-1);程序如下: 
    int fun(string a)
    {
      int sum = 0;
      //在此写代码
      int length = a.Length;
      if(length == 1)
      return sum;
      else
    {
      string b = a.subString(1);
      return int.Parse (Math.Pow(2, length-1) ) * (n-1) + fun(b)*2;
    }  }家里电脑没装编译器 有错误调试下
    上面那个公式应该是 OK的
      

  6.   

    晕还,题目里有一个错误
    for(i=0;j<a.Length,i++)
    这个时候j从哪里来??
    正确的应该是
    当传入参数string a = "123";
    for (int i = 0; i < a.Length; i++)
        for (int j = 0; j < i; j++)
            for (int k = 0; k < j; k++)
                 sum += (i + j + k);
    反过来思考
    k=0时,j至少为1,i至少为2,2<"123".Length,
    所以只会有一种情况
      

  7.   

    不也意思上面的写错了 应该 是 2的n-2次方上面的改两个地方 
    f(1) = 0;
    f(n) = 2的(n-2)次方*(n-1) + 2*f(n-1);  n>=2int.Parse (Math.Pow(2, length-2) ) * (n-1) + fun(b)*2;
      

  8.   

    Bote_china 你好好看看题目 
    0 0 0 
    1 0 0 
    2 0 0
    2 1 0
    应该是上面的情况不是你说的只有一种情况
      

  9.   

    for (int i = 0; i < a.Length; i++)
        for (int j = 0; j < i; j++)
            for (int k = 0; k < j; k++)
                 sum += (i + j + k);
      

  10.   

    我的习惯是尽量做到回答之前实验,求证,这个题目大家有没有试验过呢?按楼主多层循环的方法多试验一些情况,a="1",a="12",a="123",a="1234".....,看看是不是所说的那样,再下结论吧.
    bestyond() ,i=2,j=0时, for (int k = 0; k < j; k++),这个循环满足还是不满足,会不会持行
    sum+= (i + j + k)??
      

  11.   

    晕倒 居然犯下这么低级的错误
    哎LZ你可浪费了我的宝贵时间呀
    不过我想LZ的本意可能是想要我的那种结果吧
      

  12.   

    我有一程序有问题,也帮忙看看吧!验证括号匹配
    void main()/*主函数*/
    {
        int i,k;char str[255];char *p;SqStack s;
        printf("\nPlease input the elem:\n");
        InitStack(&s);/*初始化栈*/
        for(i=0;i<255;i++)
       {
         scanf("%c",&str[i]);
         Push(&s,str[i]);
         p=s.top;
         p--;
         if(p==')')
         {
    k=i;
    do
    {
       p--;
       k--;
       
    }while((p!='(')&&(k>0));
    if(p=='(')
    {
       printf("\n'(' and ')'can match!\n",k+1,i+1);
       
    }
    else
    {
       printf("\n not matched;\n",i+1);
    }
        }
       }
    }
      

  13.   

    不好意思,确实有些写错了,更正一下:for (int i = 0; i < a.Length; i++)
        sum += i;
    当传入参数string a = "12";时for (int i = 0; i < a.Length; i++)
        for (int j = 0; j < i; j++)
            sum += (i + j);跟字符串本身包含的内容无关,只跟长度有关,把他写成数字是为了便于理解题意
    当传入参数string a = "123";
    for (int i = 0; i < a.Length; i++)
        for (int j = 0; j < i; j++)
            for (int k = 0; k < j; k++)
                 sum += (i + j + k);
      

  14.   

    Sub DoIt(ByRef Sum As Integer, ByVal StrCode As String, ByVal CurLength As Integer, ByVal TempSum As Integer, ByVal Cyc As Integer)
            Dim II As Integer
            For II = 0 To CurLength - 1
                If Cyc = StrCode.Length Then
                    Sum = TempSum + II
                Else
                    Cyc += 1
                    TempSum += II
                    DoIt(Sum, StrCode, II, TempSum, Cyc)
                End If
            Next
        End Sub    Function GetSum(ByVal StrCode As String) As Integer
            Dim Sum As Integer
            DoIt(Sum, StrCode, StrCode.Length, 0, 1)
            Return Sum
        End Function    Private Sub MyButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyButton1.Click
            MsgBox(GetSum("abcd"))
        End Sub不知道是否正确哈~~简单的写了一下,思路没问题,但是可能算法不够简练;
    第归应该还是可以实现的,回头转换成C#给你,我不大会C#,可能会有问题
      

  15.   

    public void DoIt(ref int Sum, string StrCode, int CurLength, int TempSum, int Cyc)
    {
    int II;
    for (II = 0; II <= CurLength - 1; II++) {
    if (Cyc == StrCode.Length)
    {
    Sum = TempSum + II;
    }
    else
    {
    Cyc += 1;
    TempSum += II;
    DoIt(Sum, StrCode, II, TempSum, Cyc);
    }
    }
    }public int GetSum(string StrCode)
    {
    int Sum;
    DoIt(Sum, StrCode, StrCode.Length, 0, 1);
    return Sum;
    }大体就这样了,你自己验证是否正确吧,呵呵,50分不多,不过问题挺有意思;
      

  16.   

    你略为改动一下吧,我只能用自动转换生成的C#,VB的代码肯定没有问题;——可怜我一行C#也不会写啊,思路在那里,应该没有什么难度了阿
      

  17.   

    你可以写几个正确答案,我用VB的试验一下“思路”是否正确,不过估计就是有偏差,也不会很大。==================================================================
    博客空间:http://blog.csdn.net/lovingkiss
    资源下载:http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    优惠接单开发,收费带初学者,组件控件定制开发,成品源代码批发
    联系方式:Q64180940(请清楚注明业务还是技术咨询)  全天在线
    ==================================================================
      

  18.   

    public void DoIt(ref int Sum, string StrCode, int CurLength, int TempSum, int Cyc)这个函数怎么连返回值都没的
      

  19.   

    ref 是引用
    返回的就是 ref的值!
      

  20.   

    guoweidong,想说明什么??Sum这个变量要的就是能返回的值啊。
    ——我不会C#,不知道是不是这样写,会有问题;Bote_China,不定层数循环,除了第归,我真的不知道还有什么方法可以让代码更简洁,给个思路就Ok,算法我不是很擅长;
      

  21.   

    lovingkiss我认为你写的没错,刚才不是我的问题!我只是在你答案上解释一下的!
      

  22.   

    Sum这个变量,就是用来层层保留,相互传递;
    在Vb.net里面用Byref来实现,不知道C#的ref是不是也是同样的功能。
    让楼上的困惑了,呵呵~~~~~~~~~——我的思路应该不会有太大的出入的。
      

  23.   

    哈哈,其实下面程序段就可得出正确结果:
    static int fun(string a)
    {
      int sum = 0;
      for(int i=0;i<a.Length;i++)
      {
          sum+=i;
      }
      return sum;
    }
    大家可以验证一下,被假象迷惑了!结果与上楼仁兄(lovingkiss)的结果一样!
      

  24.   

    我把你的代码修改了一下,编译通过了using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;namespace ConsoleApplication51
    {
        class Program
        {
            static void DoIt(ref int Sum, string StrCode, int CurLength, int TempSum, int Cyc)
            {
                int II;
                for (II = 0; II <= CurLength - 1; II++)
                {
                    if (Cyc == StrCode.Length)
                    {
                        Sum = TempSum + II;
                    }
                    else
                    {
                        Cyc += 1;
                        TempSum += II;
                        DoIt(ref Sum, StrCode, II, TempSum, Cyc);
                    }
                }
            }        static int GetSum(string StrCode)
            {
                int Sum = 0;
                DoIt(ref Sum, StrCode, StrCode.Length, 0, 1);
                return Sum;
            }
            static void Main(string[] args)
            {
                string str = "1234";
                Console.WriteLine(GetSum(str));
            }
        }
    }
      

  25.   

    分析一下,举个例子,参数a的长度为10,那么按题目要求应该是10层循环,那么最后一层循环到第一层循环反向推理
    第10层循环循环变量为0时
    第9层循环变量致少为1,
    第8层循环变量致少为2,
    第7层循环变量致少为3,
    第6层循环变量致少为4,
    第5层循环变量致少为5,
    第4层循环变量致少为6,
    第3层循环变量致少为7,
    第2层循环变量致少为8,
    第1层循环变量致少为9
    由此可见,满足执行sum+=...语句的条件只有一种情况,即0+1+2+3+4+5+6+7+8+9,所以这个题实际上是求0到n-1的和
      

  26.   

    Bote_China() 高手啊!向你学习数学推导!
      

  27.   

    其实把这个算法思想懂了,程序是非常简单的,程序只能执行一次,不需要递归!就象Bote_China()所说的那样,只有在那一种情况下才会累加sum的值,其实情况下就执行不到累加语句,所以程序可以简化为我上面写的那样!
      

  28.   

    结贴了,Bote_China40分!
            lovingkiss10分!
      

  29.   

    Sum = Sum + TempSum + II
    应该是我漏写了一个累加,抱歉,How_do的算法也要改了,瓦卡卡~~~~~~~~~~
      

  30.   

    1、我错了,造成How_do算法的错误,也造成了“Bote_China”高明理论的失误,我先表示歉意;
    2、我对大家这种得到答案再倒推的做法,无可厚非,可也无言以对,因为我少写了一个Sum+,造成你们“分析错误”深表歉意;3、我对楼主给分方式不以为然,我多少无所谓,就算给代码,也确实是How_do先给出来的,虽然大家都错了,而且大部分代码是我写的,呵呵~~算个球吧~~
      

  31.   

    呵呵,我是老老实实的按照题目手动推了几个得出的结论!我正在看那位仁兄(lovingkiss)的代码,我的代码哪个地方出问题了,请老兄指出,知识是在一次次的讨论中积累的!
      

  32.   

    呵呵,其实How_do() 回的贴我在最前面已经回了,也被好几个人置疑过,分多少无所谓,自己有成就感就行
      

  33.   

    我也是这个想法,分不如正确答案;
    算法我做错了,少写了一个加号,没有累计Sum
    应该是Sum+=,而不是Sum=,所以你们的答案跟着我错了。
      

  34.   

    lovingkiss,算法的结果肯定是0到n-1的和,你的算法我没有验证过,也没有仔细分析你的代码。
    你从第一个回贴看起,就知道为什么了。
      

  35.   

    典型的递归啊...高中的知识f(x) = f(x -1) + a