杭电acm P2007

本文介绍了一种算法,用于计算给定范围内连续整数的所有偶数平方和及所有奇数立方和。提供了两种实现方法,一种通过数组存储数值再进行运算,另一种直接迭代计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem Description
给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。

Input
输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成。

Output
对于每组输入数据,输出一行,应包括两个整数x和y,分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。
你可以认为32位整数足以保存结果。

Sample Input
1 3
2 5

Sample Output
4 28
20 152

法一:
import java.util.Scanner;
public class P2007 {
   public static void main(String[] args) {
     Scanner sc=new Scanner(System.in);
     while(sc.hasNext()){
         int m=sc.nextInt();
         int n=sc.nextInt();
         int[] a=new int[n-m+1];
        int t=m;
         int sum=0,lf=0;
         for(int i=0;i<n-m+1;i++){
             a[i]=t;
             t++;
             if(a[i]==n){
                 break;
             }
         }
         if((n-m)%2==0){
             if(n%2==0){
                 for(int i=0;i<n-m+1;i+=2){
                     sum+=(a[i]*a[i]);
                 }
                 for(int i=1;i<n-m+1;i+=2){
                     lf+=(a[i]*a[i]*a[i]);
                 }
             }else{
                 for(int i=1;i<n-m+1;i+=2){
                     sum+=(a[i]*a[i]);
                 }
                 for(int i=0;i<n-m+1;i+=2){
                     lf+=(a[i]*a[i]*a[i]);
                 }
             }
         }else{
             if(n%2==0){
                 for(int i=1;i<n-m+1;i+=2){
                     sum+=(a[i]*a[i]);
                 }
                 for(int i=0;i<n-m+1;i+=2){
                     lf+=(a[i]*a[i]*a[i]);
                 }
             }else{
                 for(int i=0;i<n-m+1;i+=2){
                     sum+=(a[i]*a[i]);
                 }
                 for(int i=1;i<n-m+1;i+=2){
                     lf+=(a[i]*a[i]*a[i]);
                 }
             }
         }
         System.out.println(sum+" "+lf);
     }
}
}
法二:
import java.util.Scanner;
public class P20072 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int m=sc.nextInt();
            int n=sc.nextInt();
            if(m>n){
                int t=m;
                m=n;
                n=t;
            }
            int sum=0,lf=0;
            for(int i=m;i<=n;i++){
                if(i%2==0){
                    sum+=i*i;
                }else{
                    lf+=i*i*i;
                }
            }
            System.out.println(sum+" "+lf);
      }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值