7-5 sdut-数据类型-2 应用勾股定理,了解世界灿烂文明 (10分)

        意义:勾股定理是历史上第一个把数与形联系起来的定理,导致了无理数的发现,引起第一次数学危机,大大加深了人们对数的理解。勾股定理是欧氏几何的 基础定理,不仅在几何学中是一颗光彩夺目的明珠,被誉为“几何学的基石”,而且在高等数学和其他科学领域也有着广泛的应用。1971年5月15日,尼加拉瓜 发行了一套题为“改变世界面貌的十个数学公式”邮票,这十个数学公式由著名数学家选出的,勾股定理是其中之首。 简史: 在中国,公元前十一世纪,数学家商高(西周初年人)就提出“勾三、股四、弦五”。编写于公元前一世纪以前的《周髀算经》中记录着商高与周公的一段对话。 商高说:“……故折矩,勾广三,股修四,经隅五。”意为:当直角三角形的两条直角边分别为3(勾)和4(股)时,径隅(弦)则为5。以后人们就简单地把这 个事实说成“勾三股四弦五”,根据该典故称勾股定理为商高定理。 公元三世纪,三国时代的赵爽对《周髀算经》内的勾股定理作出了详细注释,记录于《九章算术》中“勾股各自乘,并而开方除之,即弦”,赵爽创制了一幅“勾 股圆方图”,用数形结合得到方法,给出了勾股定理的详细证明。后刘徽在刘徽注中亦证明了勾股定理。 在中国清朝末年,数学家华蘅芳提出了二十多种对于勾股定理证法。 在国外,远在公元前约三千年的古巴比伦人就知道和应用勾股定理,他们还知道许多勾股数组。美国哥伦比亚大学图书馆内收藏着一块编号为“普林顿322”的古 巴比伦泥板,上面就记载了很多勾股数。古埃及人在建筑宏伟的金字塔和测量尼罗河泛滥后的土地时,也应用过勾股定理。 公元前六世纪,希腊数学家毕达哥拉斯证明了勾股定理,因而西方人都习惯地称这个定理为毕达哥拉斯定理。 公元前4世纪,希腊数学家欧几里得在《几何原本》中给出一个证明。 1940年《毕达哥拉斯命题》出版,收集了367种不同的证法。 定义:在平面上的一个直角三角形中,两个直角边边长的平方加起来等于斜边长的平方。如果设直角三角形的两条直角边长度分别是和,斜边长度是,那么可 以用数学语言表达: a +b =c 请编程程序,实现如下功能:输入直接三角形的两个直角边的边长,求它们的斜边边长,结果保留2位小数。 提示:在Java中利用Math类的方法——**Math.sqrt()**求平方根。 java.lang.Math.sqrt(double a) 返回一个double值的正平方根。

输入格式: 输入有若干行,每行有2个数值,分别表示直角三角形的两个直角边长度,用空格分隔。 输出格式: 对应每行输入数据,输出直角三角形的斜边长度,结果保留2位小数。

输入样例:

3 4

2.3 3

5 6

10 12

输出样例: 在这里给出相应的输出。

例如:

5.00

3.78

7.81

15.62

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner r = new Scanner(System.in);
        while (r.hasNext()){
            double a = r.nextDouble();
            double b = r.nextDouble();
            double c = Math.sqrt(a*a+b*b);
            System.out.printf("%.2f\n",c);
        }
    }
}

### SDUT C语言实验中最长公共子序列 (LCS) 问题解法 #### 动态规划方法概述 动态规划(Dynamic Programming, DP)是一种常用的算法设计技术,适用于解决最优化问题。在处理字符串匹配类问题时,动态规划尤为有效。对于最长公共子序列(Longest Common Subsequence, LCS)问题,其核心在于通过构建一个二维表格 `dp` 来记录两个字符串之间的状态关系。 设给定的两个字符串别为 \( X \) 和 \( Y \),长度别为 \( m \) 和 \( n \)。定义二维数组 `dp[i][j]` 表示字符串 \( X[1..i] \) 和 \( Y[1..j] \) 的最长公共子序列的长度,则可以得到如下转移方程: \[ dp[i][j] = \begin{cases} 0 & \text{if } i=0 \text{ or } j=0 \\ dp[i-1][j-1]+1 & \text{if } X[i]=Y[j] \\ \max(dp[i-1][j], dp[i][j-1]) & \text{otherwise } \end{cases} \] 最终的结果即为 \( dp[m][n] \)[^1]。 #### 实现代码 以下是基于上述理论实现的一个标准 C 语言程序: ```c #include <stdio.h> #include <string.h> void lcs(char *X, char *Y, int m, int n) { int dp[m+1][n+1]; // 初始化 dp 数组 for(int i = 0; i <= m; i++) { for(int j = 0; j <= n; j++) { if(i == 0 || j == 0) dp[i][j] = 0; else if(X[i-1] == Y[j-1]) dp[i][j] = dp[i-1][j-1] + 1; else dp[i][j] = (dp[i-1][j] > dp[i][j-1]) ? dp[i-1][j] : dp[i][j-1]; } } printf("Length of Longest Common Subsequence is %d\n", dp[m][n]); } int main() { char X[] = "AGGTAB"; char Y[] = "GXTXAYB"; int m = strlen(X); int n = strlen(Y); lcs(X, Y, m, n); return 0; } ``` 此代码实现了计算两字符串之间最长公共子序列的功能,并打印出该子序列的长度。 #### 复杂度析 时间复杂度主要由嵌套循环决定,由于需要遍历整个二维表,故时间为 \( O(m \times n) \)。空间上也需要开辟大小为 \( (m+1) \times (n+1) \) 的辅助矩阵用于存储中间结果,因此空间复杂度亦为 \( O(m \times n) \)---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值