您的位置:首页 > 编程语言 > Java开发

HDU-ACM2015偶数求和

2016-03-25 15:37 531 查看
杭电ACM2015  偶数求和

[align=left]Problem Description[/align]
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
 
[align=left]Input[/align]
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。

 
[align=left]Output[/align]
对于每组输入数据,输出一个平均值序列,每组输出占一行。

 
[align=left]Sample Input[/align]

3 2
4 2

 
[align=left]Sample Output[/align]

3 6
3 7

解法一(这种方法会比较好理解一些):
import java.util.Scanner;

class Main{
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int arr[]=new int[100];
arr[0]=2;
for (int i=1;i<arr.length;i++){
arr[i]=arr[i-1]+2;
}
while (input.hasNext()){
int n=input.nextInt();
int m=input.nextInt();
int c=0,ave=0;
int t=0;
if (n%m!=0){
t=n%m;
}
int space=0;
for (int i=0;i<n-t;i++){
ave+=arr[i];
c++;
if (c==m){
if (space++>0){
System.out.print(" ");
}
System.out.print(ave/m);
c=0;
ave=0;
}
}
if (t!=0){
for (int i=0;i<t;i++){
ave+=arr[n-t+i];
}
System.out.print(" "+ave/t);
}
System.out.println();
}
}
}


解法二(这种方法更优化些,需要好好理解):
import java.util.*;

class Main
{
public static void main(String args[]){
Scanner input=new Scanner(System.in);
while (input.hasNext())
{
int n=input.nextInt();
int m=input.nextInt();
int ave=0;
int i=0;
while (n>m)
{
ave=(m+1)+2*m*i;
n-=m;
i++;
System.out.print(ave+" ");
}
ave=(1+n)+2*m*i;
System.out.println(ave);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java