当前位置:编程学习 > C#/ASP.NET >>

C语言编程统计

统计100到900之间各个位之和为8(如512,5+1+2=8)的个数,并把它们放在数组a中,求这些数的平均值 --------------------编程问答-------------------- 发错地方了- - --------------------编程问答--------------------

using System;
using System.Collections;
class Test
{
    static void Main()
    {
        int a, b, c;
        ArrayList array = new ArrayList();
        for (int i = 100; i < 900; i++)
        {
            a = i / 100;//百位数
            b = i / 10 % 10;//十位数
            c = i % 10;//个位数
            int temp = a + b + c;
            if ( temp == 8)
            {
                array.Add(i);
            }
        }
        int sum = 0;
        foreach (object o in array)
        {            
            sum += (int)o;            
        }
        Console.WriteLine(sum);
    }
}
--------------------编程问答-------------------- 平均数自己求。 --------------------编程问答--------------------
引用 2 楼 gyf529036756 的回复:
C# code

using System;
using System.Collections;
class Test
{
    static void Main()
    {
        int a, b, c;
        ArrayList array = new ArrayList();
        for (int i = 100; i < 900; ……

这个程序写得太菜真侮辱 C#。 --------------------编程问答--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = Enumerable.Range(100, 801)
                .Where(x => x.ToString().ToCharArray().Select(y => Convert.ToInt32(y.ToString())).Sum() == 8)
                .ToArray();
            Console.WriteLine("这些数是:");
            a.ToList().ForEach(x => Console.WriteLine(x));
            Console.WriteLine("个数:{0}, 平均数: {1}。", a.Count(), a.Average());
        }
    }
}


这些数是:
107
116
125
134
143
152
161
170
206
215
224
233
242
251
260
305
314
323
332
341
350
404
413
422
431
440
503
512
521
530
602
611
620
701
710
800
个数:36, 平均数: 359。
Press any key to continue . . . --------------------编程问答-------------------- to 5楼:

你这不菜的程序效率真不咋样。 --------------------编程问答-------------------- 重复执行10000次测试
以下代码输出结果:
time1=00:00:00.3500200, time2=00:00:12.9837426

也就是3楼代码耗时350ms,5楼代码耗时12秒983毫秒。



        static void Main(string[] args)
        {
            //Func2();
            //Func1();
            int count1=0, count2=0;
            double avgVal1=0, avgVal2=0;

            DateTime time = DateTime.Now;
            TimeSpan tsp1, tsp2;
            
            int nRepeatTime = 10000;
            for (int i = 0; i < nRepeatTime; i++)
            {
                Avange1(out count1, out avgVal1);
            }

            tsp1 = DateTime.Now - time;
            time = DateTime.Now;

            for (int i = 0; i < nRepeatTime; i++)
            {
                Avange2(out count2, out avgVal2);
            }
            tsp2 = DateTime.Now - time;
            time = DateTime.Now;
            Console.WriteLine("time1={0}, time2={1}", tsp1, tsp2);
            Console.WriteLine("count1={0}, Avange1={1}", count1, avgVal1);
            Console.WriteLine("count2={0}, Avange2={1}", count2, avgVal2);
        }


        static void Avange1(out int count, out double val)
        {
            int a, b, c;
            ArrayList array = new ArrayList();
            for (int i = 100; i < 900; i++)
            {
                a = i / 100;//百位数
                b = i / 10 % 10;//十位数
                c = i % 10;//个位数
                int temp = a + b + c;
                if (temp == 8)
                {
                    array.Add(i);
                }
            }

            int sum = 0;
            foreach (object o in array)
            {
                sum += (int)o;
            }
            //Console.WriteLine(sum);
            count = array.Count;
            val = sum;
            val /= count;
        }

        static void Avange2(out int count, out double val)
        {
            int[] a = Enumerable.Range(100, 801)
                .Where(x => x.ToString().ToCharArray().Select(y => Convert.ToInt32(y.ToString())).Sum() == 8)
                .ToArray();
            //Console.WriteLine("这些数是:");
            //a.ToList().ForEach(x => Console.WriteLine(x));
            //Console.WriteLine("个数:{0}, 平均数: {1}。", a.Count(), a.Average());

            count = a.Count();
            val = a.Average();
        }

--------------------编程问答-------------------- --------------------编程问答-------------------- 按楼主的要求,c语言版。感谢2楼吧。

int main()
{
    int a, b, c;
    int arrayNum[800];
int nIndex = 0;
    int sum = 0;
int i = 0;
int temp = 0;
double avange = 0;
    for (i = 100; i < 900; i++)
    {
        a = i / 100;//百位数
        b = i / 10 % 10;//十位数
        c = i % 10;//个位数
        temp = a + b + c;
        if ( temp == 8)
        {
            arrayNum[nIndex++] = i;
        }
    }
    for (i=0; i<nIndex; i++)
    {            
        sum += arrayNum[i];
    }
avange = (double)sum / nIndex;
    printf("count = %d, avange = %g", nIndex, avange);
    return 0;
}
--------------------编程问答-------------------- 9楼再给优化优化啊。 --------------------编程问答--------------------
引用 8 楼 caozhy 的回复:
引用 6 楼 matrixcl 的回复:
to 5楼:

你这不菜的程序效率真不咋样。

C# code
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Test
{
    static voi……


1.你的代码比2楼效率高20%左右,但是2楼比你的5楼高30倍。
2.没有按楼主要求放在数组a中 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 另外要较真,你的程序同样是错误的。
因为你的数组第37~800个元素根本就不是有效数。 --------------------编程问答-------------------- 并行计算都用上了,要是拿8核的机器,你还可以更快。

就你的代码而言,和数据依赖太紧密,数据稍微一遍都需要改算法实现。如果就解决这个问题本身的,将数据hardcode到代码中,可以快很多倍。

不过还是谢谢你,让我知道了Parallel.For的用法 --------------------编程问答--------------------
引用 15 楼 matrixcl 的回复:
并行计算都用上了,要是拿8核的机器,你还可以更快。

就你的代码而言,和数据依赖太紧密,数据稍微一遍都需要改算法实现。如果就解决这个问题本身的,将数据hardcode到代码中,可以快很多倍。

不过还是谢谢你,让我知道了Parallel.For的用法

如果你能意识到性能和代码的可读性是此消彼长的关系。
片面追求性能没有任何价值。(对于lz的需求,即使再慢10倍的程序也小于人的感知)

你就进步了。 --------------------编程问答--------------------
引用 16 楼 caozhy 的回复:
引用 15 楼 matrixcl 的回复:
并行计算都用上了,要是拿8核的机器,你还可以更快。

就你的代码而言,和数据依赖太紧密,数据稍微一遍都需要改算法实现。如果就解决这个问题本身的,将数据hardcode到代码中,可以快很多倍。

不过还是谢谢你,让我知道了Parallel.For的用法

如果你能意识到性能和代码的可读性是此消彼长的关系。
片面追求性能没有任何价值。(对于……


大部分认可,但是对于30倍的性能差异不能完全无视,至少做到心里有数。

仅这一个地方确实没必要优化太多,但如果程序中很多地方都无视的话,数据量增加到一定程度影响就非常大了。

很多人都说c#慢,实际语言本身对性能影响有限。更多的是程序员不注意的结果。 --------------------编程问答--------------------
引用 17 楼 matrixcl 的回复:
引用 16 楼 caozhy 的回复:

引用 15 楼 matrixcl 的回复:
并行计算都用上了,要是拿8核的机器,你还可以更快。

就你的代码而言,和数据依赖太紧密,数据稍微一遍都需要改算法实现。如果就解决这个问题本身的,将数据hardcode到代码中,可以快很多倍。

不过还是谢谢你,让我知道了Parallel.For的用法

如果你能意识到性能和代码的可读性是此消彼长……


说到性能,多说两句。

你的分析还是粗浅了一些。

对于一个程序,最关心的问题是热区,所谓热区,就是反复执行,或者执行时间很长的代码部分。
一般来说程序中只有10%或者更少的地方是热区,改善热区性能对程序的性能提高是显著的,否则是不显著的。

其次关心的是算法复杂度。你说到30倍,那么随着问题规模的增加,这个值是常数么?还是线性的,还是几何倍数增长的。如果是常数,甚至 log(n),则没有什么大惊小怪的。

其次是算法的可伸缩性,是否具有并行计算的潜能,是否在多机下保持良好的加速比。

算法本身的策略和结构是最重要的。在这个帖子的问题上,用的算法都是线性的,本质上没有差异。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
引用 18 楼 caozhy 的回复:
说到性能,多说两句。

你的分析还是粗浅了一些。

对于一个程序,最关心的问题是热区,所谓热区,就是反复执行,或者执行时间很长的代码部分。
一般来说程序中只有10%或者更少的地方是热区,改善热区性能对程序的性能提高是显著的,否则是不显著的。

其次关心的是算法复杂度。你说到30倍,那么随着问题规模的增加,这个值是常数么?还是线性的,还是几何倍数增长的。如果是常数,甚至 log(n),则没有什么大惊小怪的。

其次是算法的可伸缩性,是否具有并行计算的潜能,是否在多机下保持良好的加速比。

算法本身的策略和结构是最重要的。在这个帖子的问题上,用的算法都是线性的,本质上没有差异。


本来不想说了,看到你的回复还是忍不住再挑个刺。效率差log(n)也没什么?这么说O(N)和O(N*logN)是效率一样的算法了。

回你这个贴是因为你对别人的那句评价“这个程序写得太菜真侮辱 C#。”
而你接着给出得代码中反复使用的ToString、Convert.ToInt32都是很耗时的操作,这种用法真对不上你的那句评价。
那条语句完全可以写的更优雅,更高效。 --------------------编程问答--------------------
引用 20 楼 caozhy 的回复:
现在你还觉得2楼效率高么?


我从来没认为2楼高效,只认为2楼比5楼高效。
另外我已经完全迷惑了,你到底在追求绝对的高效还是兼顾灵活性、可读性?

你觉得的代码很高效是吗?我给你个更高效的:
比你这个最快的快100多倍。


        static void Main()
        {
            const int NTimes = 10000000;
            long tick1 = DateTime.Now.Ticks;
            for (int count = 0; count < NTimes; count++)
            {
                int sum1 = 0;
                for (int i = 1; i <= 8; i++)
                {
                    for (int j = 0; j <= 8 - i; j++)
                    {
                        int k = 8 - i - j;
                        sum1 += i * 100 + j * 10 + k;
                    }
                }
            }
            long tick2 = DateTime.Now.Ticks;
            Console.WriteLine("time 1:" + (tick2 - tick1));

            long tick3 = DateTime.Now.Ticks;
            for (int count = 0; count < NTimes; count++)
            {
                int sum1 = 12924;

            }
            long tick4 = DateTime.Now.Ticks;
            Console.WriteLine("time 1:" + (tick4 - tick3));

        }

time 1:45182584
time 1:360020


--------------------编程问答--------------------
引用 22 楼 matrixcl 的回复:
引用 20 楼 caozhy 的回复:
现在你还觉得2楼效率高么?


我从来没认为2楼高效,只认为2楼比5楼高效。
另外我已经完全迷惑了,你到底在追求绝对的高效还是兼顾灵活性、可读性?

你觉得的代码很高效是吗?我给你个更高效的:
比你这个最快的快100多倍。

C# code

        static void Main()
        {
         ……

学习写程序是你自己的事情。抬杠不利于你的进步。 --------------------编程问答--------------------
引用 22 楼 matrixcl 的回复:
引用 20 楼 caozhy 的回复:
现在你还觉得2楼效率高么?


我从来没认为2楼高效,只认为2楼比5楼高效。
另外我已经完全迷惑了,你到底在追求绝对的高效还是兼顾灵活性、可读性?

你觉得的代码很高效是吗?我给你个更高效的:
比你这个最快的快100多倍。

C# code

        static void Main()
        {
         ……

p.s. 就算抬杠也请看清题目。你没有放入数组哦。 --------------------编程问答-------------------- 下面两段代码,那个可读性高呢?
前者是你5楼写的。
后者效率耗时是前者的1/30。执行10000次,前者8.63秒,后者0.26秒。


            int[] a = Enumerable.Range(100, 801)
                .Where(x => x.ToString().ToCharArray().Select(y => Convert.ToInt32(y.ToString())).Sum() == 8)
                .ToArray();


            int[] a = Enumerable.Range(100, 801)
                .Where(x => (x / 100 + x / 10 % 10 + x % 10 == 8))
                .ToArray();
--------------------编程问答--------------------
引用 24 楼 caozhy 的回复:
引用 22 楼 matrixcl 的回复:

引用 20 楼 caozhy 的回复:
现在你还觉得2楼效率高么?


我从来没认为2楼高效,只认为2楼比5楼高效。
另外我已经完全迷惑了,你到底在追求绝对的高效还是兼顾灵活性、可读性?

你觉得的代码很高效是吗?我给你个更高效的:
比你这个最快的快100多倍。

C# code

static void Main()
……

用来比较的那个,你也没放。

PS:我知道怎么进步。我的编程经验未必比你少。 --------------------编程问答--------------------
引用 26 楼 matrixcl 的回复:
引用 24 楼 caozhy 的回复:

引用 22 楼 matrixcl 的回复:

引用 20 楼 caozhy 的回复:
现在你还觉得2楼效率高么?


我从来没认为2楼高效,只认为2楼比5楼高效。
另外我已经完全迷惑了,你到底在追求绝对的高效还是兼顾灵活性、可读性?

你觉得的代码很高效是吗?我给你个更高效的:
比你这个最快的快100多倍。

C# code
……

不了解你

但是从你的这些抬杠来看,的确如此。很业余。

当然,你深藏不漏故意装傻也有可能。 --------------------编程问答--------------------
引用 27 楼 caozhy 的回复:
引用 26 楼 matrixcl 的回复:

引用 24 楼 caozhy 的回复:

引用 22 楼 matrixcl 的回复:

引用 20 楼 caozhy 的回复:
现在你还觉得2楼效率高么?


我从来没认为2楼高效,只认为2楼比5楼高效。
另外我已经完全迷惑了,你到底在追求绝对的高效还是兼顾灵活性、可读性?

你觉得的代码很高效是吗?我给你个更高效的:
比……


好吧专业人士and MVP同学,请回复25楼 --------------------编程问答--------------------
引用 28 楼 matrixcl 的回复:
引用 27 楼 caozhy 的回复:

引用 26 楼 matrixcl 的回复:

引用 24 楼 caozhy 的回复:

引用 22 楼 matrixcl 的回复:

引用 20 楼 caozhy 的回复:
现在你还觉得2楼效率高么?


我从来没认为2楼高效,只认为2楼比5楼高效。
另外我已经完全迷惑了,你到底在追求绝对的高效还是兼顾灵活性、可读性?

你……

我说了,学习是你自己的事情,除了父母和你付费找的老师,没有人有义务告诉你什么是对什么是错。 --------------------编程问答--------------------
引用 29 楼 caozhy 的回复:
引用 28 楼 matrixcl 的回复:

引用 27 楼 caozhy 的回复:

引用 26 楼 matrixcl 的回复:

引用 24 楼 caozhy 的回复:

引用 22 楼 matrixcl 的回复:

引用 20 楼 caozhy 的回复:
现在你还觉得2楼效率高么?


我从来没认为2楼高效,只认为2楼比5楼高效。
另外我已经完全迷惑了,你到底……


谢谢 --------------------编程问答-------------------- 你认为你是对的,并且学到了就可以了。

你跑去跟你老板说,我比mvp都强,辩论战胜了他,你看你老板会给你加一块钱工资不会。 --------------------编程问答--------------------
引用 31 楼 caozhy 的回复:
你认为你是对的,并且学到了就可以了。

你跑去跟你老板说,我比mvp都强,辩论战胜了他,你看你老板会给你加一块钱工资不会。


你太高估MVP的含金量了 --------------------编程问答-------------------- --------------------编程问答-------------------- 这是我回复此贴的原因:

引用 4 楼 caozhy 的回复:
引用 2 楼 gyf529036756 的回复:

这个程序写得太菜真侮辱 C#。


引用 5 楼 caozhy 的回复:
           int[] a = Enumerable.Range(100, 801)
                .Where(x => x.ToString().ToCharArray().Select(y => Convert.ToInt32(y.ToString())).Sum() == 8)
                .ToArray();



PS:在这个帖子里我学到了一些东西,但继续回复下去就真的是浪费时间了。因此这是我的最后一次回复 --------------------编程问答--------------------
引用 34 楼 matrixcl 的回复:
这是我回复此贴的原因:

引用 4 楼 caozhy 的回复:

引用 2 楼 gyf529036756 的回复:

这个程序写得太菜真侮辱 C#。


引用 5 楼 caozhy 的回复:
int[] a = Enumerable.Range(100, 801)
.Where(x => x.ToString().ToCharArray().Select(y => Conv……

没事,周末我比较有耐心。 --------------------编程问答--------------------
引用 4 楼 caozhy 的回复:
引用 2 楼 gyf529036756 的回复:
引用 2 楼 gyf529036756 的回复:
C# code

using System;
using System.Collections;
class Test
{
static void Main()
{
int a, b, c;
ArrayList array = new ArrayList();
for (int i = 100; i < 900; ……

这个程序写得太菜真侮辱 C#。
谁都是从菜的时候走过来的.
留点口德. --------------------编程问答-------------------- /* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{int i,a[100],g,b,s,n=0,sum=0;
float ave;
for (i=100;i<901;i++);
{
b=i/100;
s=i/10%10;
g=i%10;
if(b+s+g==8)
{a[n]=i;
n++;
sum+=i;
}
}
ave=float i ;
sum/n;
printf ("%d,%f",n,eve);
for(i=0;i<n;i++)
if(i%5==0)
printf("\n")
    printf("%d",a[i]);    
}
这个怎么改  --------------------编程问答-------------------- 各位各抒己见,学术上的争论有利于进步,请大家发言保持文明客气。
另外有一点,我觉得MVP最重要的不是技术最好,而是对新人最热心。 --------------------编程问答-------------------- 谢谢分享! --------------------编程问答--------------------
引用 4 楼 caozhy 的回复:
引用 2 楼 gyf529036756 的回复:
C# code

using System;
using System.Collections;
class Test
{
static void Main()
{
int a, b, c;
ArrayList array = new ArrayList();
for (int i = 100; i < 900; ……

……


这位看起来很有能耐的人,最好不要前不起菜鸟,再说2楼的也是位很有经验的牛人。
你有能耐你就写个好程序,回复就是了,不要通过贬低别人而抬高自己,觉得你比别人都强,最惹人讨厌的都是这种人
声明:俺只是菜鸟,就是看不惯这种人  支持二楼 --------------------编程问答-------------------- 我也发个程序:   
   1 #include<stdio.h>
      2 #include<sys/time.h>
      3 int main()
      4 {
      5     struct timeval pstart,pend;
      6     gettimeofday( &pstart,NULL );
      7     int buf[800], i,m=0;
      8     int tmp,sum = 0;
      9     float use;
     10     for( i=100;i<=900;i++ )
     11     {
     12         tmp=(i/100)+(( i/10 )%10)+(i%10);
     13         if( tmp==8 )
     14             buf[m++] = i;
     15     }
     16     for( i=0;i<m;i++)
     17     {
     18         sum = sum+buf[i];
     19         printf("%d:%d\n",i,buf[i]);
     20     }
     21     printf( "avr=%d\n",sum/36 );
     22     gettimeofday( &pend,NULL );
     23     use=1000000*(pend.tv_sec-pstart.tv_sec)-pstart.tv_usec+pend.tv_usec;
     24     use=use/1000000;
     25     printf("use time:%f\n",use );
     26     return 0;
     27 } --------------------编程问答-------------------- 谢谢大家了 --------------------编程问答-------------------- for 1-8
for 0-9
for 0-9
套三层循环就是了。
--------------------编程问答-------------------- caozhy
你有志强?你这么牛逼!唉!你写个程序要这么猛的CPU干什么 --------------------编程问答--------------------    foreach (object o in array)
        {            
            sum += (int)o;            
        }
把这个改成for 会快点! --------------------编程问答-------------------- using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Text;

class Test
{
    static void Main()
    {
        long tick1 = DateTime.Now.Ticks;
        for (int count = 0; count < 100000; count++)
        {
            int sum1 = 0;
            for (int i = 1; i <= 8; i++)
            {
                for (int j = 0; j <= 8 - i; j++)
                {
                    int k = 8 - i - j;
                    sum1 += i * 100 + j * 10 + k;
                }
            }
        }
        long tick2 = DateTime.Now.Ticks;
        Console.WriteLine(tick2 - tick1);

        long tick3 = DateTime.Now.Ticks;
        for (int count = 0; count < 100000; count++)
        {
            int sum1 = 0;
            for (int i = 1; i <= 8; i++)
            {
                for (int j = 0; j <= 8 - i; j++)
                {
                    for (int k = 0; k <= 8 - i - j; k++)
                    {
                        if (i + j + k == 8)
                            sum1 += i * 100 + j * 10 + k;
                    }
                }
            }
        }
        long tick4 = DateTime.Now.Ticks;
        Console.WriteLine(tick4 - tick3);

    }
}

--------------------编程问答--------------------                 for (int i = 1; i <= 8; i++)
                {
                    for (int j = 0; j <= 8 - i; j++)
                    {
                        int k = 8 - i - j;
                        sum1 += i * 100 + j * 10 + k;
                    }
                }
这个思路挺好的!呵呵
编程应该对琢磨琢磨 多问问自己有没有更好的方法!此帖甚好!
PS:大家别骂caozhy了 他是个好人,人挺热心的!大家别上纲上线! --------------------编程问答--------------------
顶起来 话说csdn的热心人真的很多
写代码真不是件容易的事情 --------------------编程问答-------------------- 大家加油 --------------------编程问答-------------------- 从上面看到这里,忍不住要说几句了。长时间写程序肯定会对一个人有影响的,包括性格方面,感觉好多程序员写代码时间长了都是边骂边写了,呵呵,本人不对上面任何一个人的说话方式做一评价,不过还是希望大家(不管你处于那个阶段)都能保持一个好心态,戒骄戒躁!
看来上面的程序,感觉挺受教的,谢谢各位的分享了。。我目前只懂C,上面有两个思路用C写程序来解决这个问题,第二个用三个循环的想法挺不错的,可以改进一点,对九楼的程序,800到900之间的数没必要放在循环中了;对三个循环的那个思路,第三个循环中的变量可以改成小于8-(前两个循环中变量的和),这样循环次数少了,效率会高一点。。。晒晒自己的想法,有更好的也来晒晒吧!!! --------------------编程问答--------------------
引用 44 楼 bios8086 的回复:
caozhy
你有志强?你这么牛逼!唉!你写个程序要这么猛的CPU干什么

Pentium 4 核心的 Xeon 一点也不猛。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 顶MVP --------------------编程问答-------------------- 回复更亮 --------------------编程问答-------------------- 看到大牛们在讨论能学到很多东西啊,论坛就是该有讨论的氛围,每个人都有缺点或心情不好的时候,大家相互理解就好。 --------------------编程问答--------------------
引用 56 楼 hh794362661 的回复:
看到大牛们在讨论能学到很多东西啊,论坛就是该有讨论的氛围,每个人都有缺点或心情不好的时候,大家相互理解就好。

是的 是的  每个人都是自己不同的性格 --------------------编程问答--------------------
int GetAverage(int *data, int *size)
{
int d[100] = {0};
int k = 0;
int sum = 0;
for(int i=1; i<9; i++)
{
int base = i*100 + (8-i);
int j = 8-i;
do 
{
d[k++] = base;
sum += base;
base += 9;
} while ((--j)>0);
}

data = new int[k];
*size = k;
memcpy(data, d, sizeof(int)*k);
return sum/k;
}
--------------------编程问答-------------------- 一个破程序争来争去得,相当无聊! --------------------编程问答-------------------- using System;
using System.Collections;
class Test
{
    static void Main()
    {
        int a, b, c;
        ArrayList array = new ArrayList();
        for (int i = 100; i < 900; i++)
        {
            a = i / 100;//百位数
            b = i / 10 % 10;//十位数
            c = i % 10;//个位数
            int temp = a + b + c;
            if ( temp == 8)
            {
                array.Add(i);
            }
        }
        int sum = 0;
        foreach (object o in array)
        {            
            sum += (int)o;            
        }
        Console.WriteLine(sum);
    }
}

--------------------编程问答-------------------- 直接cout效率最高,莫吵啦 --------------------编程问答-------------------- #include<stdio.h>
int main()
{
    int a[900];
    int index=0;
    int i;
    for(i=100;i<=900;i++)
    {
        if((i/100+i%10+i/10%10)==8)
        {
            a[index++]=i;
        }
    }
    int temp=0;
    i=0;
    while(i<index)
    {
        temp+=a[i];
        i++;
    }
    printf("%.2f\n",(float)temp/index);
}
--------------------编程问答-------------------- 这个题不难,看我什么时候能做出来
计时
开始。。。。。 --------------------编程问答--------------------

//1.统计100~900间的整数各个为的和是8的数(例如:512,5+1+2=8,OK!)
//2.将这些数放在数组中a[]中,并求其平均数
#include<stdio.h> 
#define MAXSIZE 800
int a[MAXSIZE]; 
int split_sum(int num)
{
    int sum=0;
    
       do{
              
         if(num<=9 && num>=0){
            return num+sum;      
         }else{ 
            sum+=num-(num/10)*10;
            //printf("sum::%d\n",sum);
            num/=10;
         }             
       }while(num>0);
     
    
   return sum;     


int main()
{
   int i=0;
   int num=100;
   int sum=0; 
   for(i=1,num=100;num<901;num++){
       //(split_sum(num)==8)? a[i++]=num : ;;
       if(split_sum(num)==8){
           a[i++]=num;
           sum+=a[i-1]; 
           printf("a[%d]::%d\n",i-1,a[i-1]);                      
       }
                                          
   }
   
   printf("sum::%d\n",sum);
   printf("平均数::%d",sum/(i-1)); 
   
   system("pause");
   return 0; 
    
       



--------------------编程问答--------------------

//1.统计100~900间的整数各个为的和是8的数(例如:512,5+1+2=8,OK!)
//2.将这些数放在数组中a[]中,并求其平均数
#include<stdio.h> 
#define MAXSIZE 800
int a[MAXSIZE]; 
int split_sum(int num)
{
    int sum=0;
    
       do{
              
         if(num<=9 && num>=0){
            return num+sum;      
         }else{ 
            sum+=num%10;//这里优化一下
            //printf("sum::%d\n",sum);
            num/=10;
         }             
       }while(num>0);
     
    
   return sum;     


int main()
{
   int i=0;
   int num=100;
   int sum=0; 
   for(i=1,num=100;num<901;num++){
       /*(split_sum(num)==8)? a[i++]=num : */
       if(split_sum(num)==8){
           a[i++]=num;
           sum+=a[i-1]; 
           printf("a[%d]::%d\n",i-1,a[i-1]);                      
       }
                                          
   }
   
   printf("sum::%d\n",sum);
   printf("平均数::%d",sum/(i-1)); 
   
   system("pause");
   return 0; 
    
       

--------------------编程问答-------------------- 路过。。。 --------------------编程问答-------------------- 作业贴吗?
逐个遍历,然后代入数组中,加起来求平均值 --------------------编程问答--------------------
引用 20 楼 caozhy 的回复:
using System;

class Program
{
    static void Main()
    {
        int sum = 0; int x = 0;
        int count = (8 + 1) * 8 / 2; // 8 + 7 + 6 + ... + 1
        int[] a = new int[count];
        for (int i = 1; i <= 8; i++)
            for (int j = 0; j <= 8 - i; j++, x++)
                sum += a[x] = i * 100 + j * 10 + 8 - i - j;
        Console.WriteLine("个数: {0}, 平均数: {1}。", count, sum / count);
    }
}


这种算法不错,比逐个遍历效率高多了。
但是这种程序书写格式是我所不喜欢的。
1、循环没有大括号
2、长等式(sum += a[x] = i * 100 + j * 10 + 8 - i - j;我更喜欢把它拆开n行写)
--------------------编程问答--------------------
引用 31 楼 caozhy 的回复:
你认为你是对的,并且学到了就可以了。

你跑去跟你老板说,我比mvp都强,辩论战胜了他,你看你老板会给你加一块钱工资不会。


狗屁 mvp平时写的代码就比人家差几十倍,基础都没打好。还有资格说别人菜。 --------------------编程问答-------------------- 希望大家不要骂人家的代码差,要理解别人,谁都是从菜鸟走过来的,人是需要不断进步的不断交流不断积累的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 挺有意思。挺有意思。这个社会人都是挺敏感的。 --------------------编程问答-------------------- 慕名而来,瞻仰帖子 --------------------编程问答-------------------- 嗯,慕名过来瞻仰。
--------------------编程问答-------------------- 求同存异共同进步这是论坛的初衷吧,鄙视那些动不动人身攻击的人 --------------------编程问答-------------------- 见识了。。。 --------------------编程问答-------------------- 嗯,慕名过来瞻仰。
 
--------------------编程问答--------------------
引用 58 楼 bit_bbtt 的回复:
C/C++ code
int GetAverage(int *data, int *size)
{
    int d[100] = {0};
    int k = 0;
    int sum = 0;
    for(int i=1; i<9; i++)
    {
        int base = i*100 + (8-i);
        int j = 8-i;
      ……


高手!捕获规律性很强~

while ((--j)>0) 应该改为:while ((--j)>=0)
--------------------编程问答--------------------

// C# 好慢~C语言表示毫无压力~哈哈~
// 在 58楼的基础上,我也写了个C语言版的~

#include <stdio.h>
// #include <stdlib.h>
#include <windows.h>

unsigned int GetAverage(unsigned int a[], unsigned int *pCount)
{
    unsigned int nCount = 0;
    unsigned int nAverage = 0;
    int i = 0;
    int j;
    register tmp;

while( ++i < 9 )
    {
        tmp = i*100 + (j = 8-i);
        do 
        {
            a[nCount++] = tmp;
            nAverage += tmp;
            tmp += 9;
        } while ((--j)>=0);
    }

    *pCount = nCount;

    return nAverage /= nCount;
}

int main(void)
{
    unsigned int a[1024];   //  = {0};
    unsigned int nCount = 0;
    unsigned int nAverage = 0;
    unsigned int i = 0;

// 开始计时
unsigned long dwStart = GetTickCount();
/////////////////////////////////////////////////////////////////////////

    unsigned long n = 10000000; // 4000000000;

do {
        nAverage = GetAverage(a, &nCount);
    } while( --n );

    for( ; i<nCount; ++i )
    {
printf("%u\n", a[i]);
    }
printf("Count=%u, Average=%u\n", nCount, nAverage);

/////////////////////////////////////////////////////////////////////////
// 终止时间
printf("Time=%lums\n", (GetTickCount() - dwStart));

    return 0 & getchar();
}

--------------------编程问答-------------------- 嘿嘿~开玩笑了~ --------------------编程问答-------------------- 贴个python,不求效率^_^

a = [num for num in xrange(100, 900) if ((num/100)+(num/10)%10+(num%10)) == 8]
print sum(a)/len(a) --------------------编程问答-------------------- 你们的交流方式 我能接受的.而且能交流中进步就是不错.. --------------------编程问答-------------------- 经人介绍
过来看看 --------------------编程问答-------------------- 真不错的帖子,讨论的很好。气氛都浓烈啊。就是把握好度,其实把握的挺好的。 --------------------编程问答-------------------- 喜欢这种帖子,学习ing --------------------编程问答-------------------- 标准技术控的人们啊 
还是值得学习 --------------------编程问答-------------------- 鼠标都滚坏了。。 --------------------编程问答-------------------- 送上一句话:“过早优化是万恶之源”
学到这句话的记得给我转500可用分,够你吃一辈子的
没学到或者之前就懂的,无视就好了 --------------------编程问答--------------------
引用 83 楼 xianglitian 的回复:
经人介绍
过来看看


顶这个 --------------------编程问答--------------------
引用 88 楼 cj205 的回复:
送上一句话:“过早优化是万恶之源”
学到这句话的记得给我转500可用分,够你吃一辈子的
没学到或者之前就懂的,无视就好了

科长也来了。。。 --------------------编程问答-------------------- 慕名而来。 --------------------编程问答-------------------- 这个帖子好多MVP哦。。。 --------------------编程问答-------------------- 看来大家都很认真哦。 --------------------编程问答--------------------
引用 90 楼 caozhy 的回复:
引用 88 楼 cj205 的回复:
送上一句话:“过早优化是万恶之源”
学到这句话的记得给我转500可用分,够你吃一辈子的
没学到或者之前就懂的,无视就好了

科长也来了。。。


话说你要了我的QQ号,也没加 神马用意 --------------------编程问答--------------------
引用 94 楼 cj205 的回复:
引用 90 楼 caozhy 的回复:

引用 88 楼 cj205 的回复:
送上一句话:“过早优化是万恶之源”
学到这句话的记得给我转500可用分,够你吃一辈子的
没学到或者之前就懂的,无视就好了

科长也来了。。。


话说你要了我的QQ号,也没加 神马用意

啊,我加了没有反应... --------------------编程问答--------------------
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <sys/timeb.h>
#include "stdlib.h"

using namespace std;
typedef vector<int> IntArray;

int _tmain(int argc, _TCHAR* argv[])
{
unsigned int dwTick1 = ::GetTickCount();
IntArray intArray;
int nTotal = 0;

for (int i = 100; i <= 800; ++i)
{
int n1 = i / 100;
int n2 = i / 10 % 10;
int n3 = i % 10;

if ((n1 + n2 + n3) == 8)
{
intArray.push_back(i);
nTotal += i;
}
}

cout << "Average :" << nTotal / intArray.size();

unsigned int dwTick2 = ::GetTickCount();
cout << "ticks =" << dwTick2 - dwTick1;

system("pause");

return 0;
}
--------------------编程问答-------------------- 献丑了。 --------------------编程问答-------------------- 测试结果:ticks = 15. Debug 版。 --------------------编程问答-------------------- 慕名而来,也来捣捣乱。
79楼代码改的,循环10000000次。没改前耗时1778毫秒。
加了并行后,耗时702毫秒。AMD955 4核心。
博大家一笑。

#include <omp.h>
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int a[1024];   //  = {0};
    unsigned int nCount = 0;
    unsigned int nAverage = 0;
    unsigned int i = 0;

    // 开始计时
    unsigned long dwStart = GetTickCount();
    /////////////////////////////////////////////////////////////////////////

    unsigned long n = 10000000;

#pragma omp parallel private(a,nCount)
{
#pragma omp for
for(int j=0; j<n; j++)
{
nAverage = GetAverage(a, &nCount);
}
}

    for( ; i<nCount; ++i )
    {
        printf("%u\n", a[i]);
    }
    printf("Count=%u, Average=%u\n", nCount, nAverage);

    /////////////////////////////////////////////////////////////////////////
    // 终止时间
    printf("Time=%lums\n", (GetTickCount() - dwStart));

    return 0 & getchar();
}

--------------------编程问答-------------------- 有意思,现在的人都太敏感,小小的心灵受不了这样的Hit~ 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,