(求1-a的和)+(1^2到b^2的和)+(1/1+1/2+……+1/c的和),Study 算法第三天(C+Java(在学ing))

求以下三数的和,保留2位小数,

题 目 : 1 + 2 + 3 + ⋯ + a + 1 2 + 2 2 + 3 2 + ⋯ + b 2 + 1 / 1 + 1 / 2 + ⋯ + 1 / c = ? 题目: 1+2+3+\cdots+a+1^2+2^2+3^2+\cdots+b^2+1/1+1/2+\cdots+1/c=? 1+2+3++a+12+22+32++b2+1/1+1/2++1/c=

1 + 2 + 3 + ⋯ + a = a ( a + 1 ) / 2 : 前 n 项 和 公 式 1+2+3+\cdots+a=a(a+1)/2:前n项和公式 1+2+3++a=a(a+1)/2:n

1 2 + 2 2 + 3 2 + ⋯ + b 2 = b ( b + 1 ) ( 2 b + 1 ) / 6 1^2+2^2+3^2+\cdots+b^2=b(b+1)(2b+1)/6 12+22+32++b2=b(b+1)(2b+1)/6

数学公式有的还是要记记的啊~~

Java版本:

import java.util.*;
public class Demo2 {

	public static void main(String[] args) {
		int a,b,c;
		double sum = 0.0;
		Scanner input=new Scanner(System.in);
	        
		a =input.nextInt();
		b =input.nextInt();
		c =input.nextInt();
		sum=a*(a+1)/2+b*(b+1)*(2*b+1)/6;
		/*
		 * a*(a+1)/2:数列前n项和
		 * b*(b+1)*(2*b+1)/6:1²+2²+3²+...+n²=n(n+1)(2n+1)/6
		 * 来自数学公式的藐视!!
		 */
		while(c!=0){
	        sum+=(1.0/c);
	        c--;
	    }
	        
		System.out.println(new java.text.DecimalFormat("#.00").format(sum));
		/*
		 * DecimalFormat类:一个NumberFormat的子类,用于格式化十进制数字。
		 * 它可以将结果转化为整数、浮点数、百分数等,通过使用该类可以为要输出的数字加上单位或控制速度
		 * DecimalFormat("#.00").format(sum)
		 * “#.00”代表保留两位小数
		 * format(sum):sum为需要格式化的数字
		 */
	}
}

C语言版:

#include<stdio.h>
int main(){
    int a, b, c;
    double sum = 0.0;
    scanf("%d %d %d",&a,&b,&c);
    sum = a*(a+1)/2+b*(b+1)*(2*b+1)/6;
    for(;c!=0;c--)
        sum+=(1.0/c);
    printf("%.2lf",sum);
    return 0;
}

这次Java的数字格式化让我有点懵,后面要找时间理一理数字格式化的内容了

这次我觉着最好的想法就是那两个公式,这俩公式一写,节省了两段循环代码,还行,数学还是蛮重要的~~~~

学习!学习!学习!

一年之后看看或许会很自豪呢

如出现问题,恳请大佬指正,感激不尽,慢慢进步ing

2020.4.23

题目和算法来源:https://www.dotcpp.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过多种方法解H(z)的差分方程,其中一种比较简单的方法是使用部分分式分解和反变换。具体步骤如下: 1. 对于分母1 + a1z^(-1) + a2z^(-2) + a3z^(-3),先出其根: z1 = a1 z2,3 = (-a1 ± sqrt(a1^2 - 4a2)) / 2 z4,5 = (-a1 ± sqrt(a1^2 - 4a3)) / 2 2. 根据根的个数和性质,将H(z)分解成多个部分分式: H(z) = [A/(1-z1z^(-1))] + [B/(1-z2z^(-1))] + [C/(1-z3z^(-1))] + [D/(1-z4z^(-1))] + [E/(1-z5z^(-1))] 其中A、B、C、D、E是待系数。 3. 将每个部分分式展开,得到: H(z) = [A/(1-z1z^(-1))] + [B/(1-z2z^(-1))] + [C/(1-z3z^(-1))] + [D/(1-z4z^(-1))] + [E/(1-z5z^(-1))] = A[1 + z1^(-1)z^(-1) + z1^(-2)z^(-2) + ...] + B[1 + z2^(-1)z^(-1) + z2^(-2)z^(-2) + ...] + C[1 + z3^(-1)z^(-1) + z3^(-2)z^(-2) + ...] + D[1 + z4^(-1)z^(-1) + z4^(-2)z^(-2) + ...] + E[1 + z5^(-1)z^(-1) + z5^(-2)z^(-2) + ...] 4. 对于每一项,提取其系数,得到: A = b0 + b1z1^(-1) + b2z1^(-2) + b3z1^(-3) B = b0 + b1z2^(-1) + b2z2^(-2) + b3z2^(-3) C = b0 + b1z3^(-1) + b2z3^(-2) + b3z3^(-3) D = b0 + b1z4^(-1) + b2z4^(-2) + b3z4^(-3) E = b0 + b1z5^(-1) + b2z5^(-2) + b3z5^(-3) 5. 将每个系数代回到部分分式展开式中,得到: H(z) = [b0 + b1z1^(-1) + b2z1^(-2) + b3z1^(-3)] / [1 - z1z^(-1)] + [b0 + b1z2^(-1) + b2z2^(-2) + b3z2^(-3)] / [1 - z2z^(-1)] + [b0 + b1z3^(-1) + b2z3^(-2) + b3z3^(-3)] / [1 - z3z^(-1)] + [b0 + b1z4^(-1) + b2z4^(-2) + b3z4^(-3)] / [1 - z4z^(-1)] + [b0 + b1z5^(-1) + b2z5^(-2) + b3z5^(-3)] / [1 - z5z^(-1)] 6. 对于每一项,可以使用Z变换的反变换得其差分方程,例如: [b0 + b1z1^(-1) + b2z1^(-2) + b3z1^(-3)] / [1 - z1z^(-1)] = B(z) / A(z) 其中A(z) = 1 - z1z^(-1),B(z) = b0 + b1z1^(-1) + b2z1^(-2) + b3z1^(-3) 对A(z)做Z变换,得到: A(z) = 1 - z1z^(-1) = z^(-3) - z2z^(-4) - z3z^(-4) + z4z^(-5) + z5z^(-5) 对B(z)做Z变换,得到: B(z) = b0 + b1z1^(-1) + b2z1^(-2) + b3z1^(-3) = b0 + b1z^(-1) + b2z^(-2) + b3z^(-3) / z1^3 根据线性时不变系统的性质,可以将系统的差分方程表示为: y(n) = b0x(n) + b1x(n-1) + b2x(n-2) + b3x(n-3) - a1y(n-1) - a2y(n-2) - a3y(n-3) 其中x(n)表示输入信号,y(n)表示输出信号,a1、a2、a3、b0、b1、b2、b3是待系数。 将Z变换的结果反变换回时域,得到: A(z)y(z) = B(z)x(z) y(n) - z2y(n-1) - z3y(n-2) + z4y(n-3) + z5y(n-4) = b0x(n) + b1x(n-1) + b2x(n-2) + b3x(n-3) 这就是H(z)的差分方程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值