zoukankan      html  css  js  c++  java
  • HDU--2015

    偶数求和

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 56836    Accepted Submission(s): 24787


    Problem Description
    有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
     

    Input
    输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
     

    Output
    对于每组输入数据,输出一个平均值序列,每组输出占一行。
     

    Sample Input
    3 2 4 2
     

    Sample Output
    3 6 3 7
     

    Author
    lcy

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
     
    int main()
    {
    	int n, m, a[110], num, sum, result, b[110];
    	memset(a,0,110);
    	memset(b,0,110);
    	while (cin >> n>> m)
    	{
    		sum = 0;
    		int flag = 0;
    		num = 2;
    		for (int i=0; i<n; i++)
    		{
    			a[i] = num;
    			num = num+ 2;
    		}
    		if (n / m !=0)
    		{
    			int t = n/m ;
    			int k = 0;
    			int p = m;
    			for ( ; t>0; t--)
    			{
    				sum = 0;
    				for (int j=k;j <p; j++)
    				{
    					sum = sum + a[j];
    				}
    				result = sum / m;
    				b[flag] = result;
    				flag= flag +1;
    				k = k+m;
    				p = p+m;
    			}
    			cout << b[0];
    			if (flag > 1)
    			{
    				for (int i=1; i<flag; i++)
    				{
    					cout <<" "<<b[i];
    				}
    			}
    			if (n%m !=0)
    			{
    				sum = 0;
    				int p= n/m;
    				for (int j=p*m; j<n; j++)
    				{
    					sum = sum +a[j];
    				}
    				result = sum /(n-p*m);
    				cout << " "<< result ;
    			}
    			cout << endl;
    		}
    		else
    		{
    			for (int j=0; j<n; j++)
    			{
    				sum = sum +a[j];
    			}
    			result = sum /n;
    			cout << result <<endl;
    		}
    	}
    	return 0;
    }

    这道题把我坑了~最后不足m个则以实际数量求平均值,可是我理解成为了去求所有数的平均值了。然后就是虽然我把这道题目解答出来了 ,但是很明显这道题我的做法有缺陷,如果当n取值超过数组保留范围的时候,我就不能用数组了,再就是代码量明显多了。。借此看了discuss里面觉得比较优秀的一段代码,因此附上如下

    #include <stdio.h>
    
    int main()
    {
        int n,m;
        while (scanf("%d %d",&n,&m)!=EOF)
        {
            int i,count = 0,tmp = 0,sum = 0;
            for (i=1;i<=n;i++)
            {
                count++; tmp += 2;
                sum += tmp;
                if (i == n)
                {
                    printf("%d
    ",sum / count);
                } 
                else if (count == m)
                {
                    printf("%d ",sum / m);
                    count = 0; sum =0;
                }
            }
        }
        return 0;
    }


  • 相关阅读:
    C#中using的使用-以FileStream写入文件为例
    C#中FileStream的对比以及使用方法
    DevExpress的TextEdit、RadioGroup、ColorPickEdit设置默认值
    DevExpress的TextEdit限制输入内容的格式,比如只能输入数字
    CS中委托与事件的使用-以Winform中跨窗体传值为例
    Winforn中怎样在窗体中打开另一个窗体
    Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载)
    Winform中实现ZedGraph的多条Y轴(附源码下载)
    《深入理解Java虚拟机》内存分配策略
    三十而立
  • 原文地址:https://www.cnblogs.com/Tovi/p/6194911.html
Copyright © 2011-2022 走看看