max函数

分治法求最大值和最小值

一世执手 提交于 2019-11-29 06:34:29
Description 给定n个数,在最坏情况下用 3n/2-2 次比较找出这n个数中元素的最大值和最小值。 要求只编写函数  void maxmin(int a[],int low,int high,int *max,int *min). 系统会自动在程序的最后加上如下代码: int main() { int max,min,k,a[200]; int m; while(scanf("%d",&k)&&k) { for(m=0;m<k;m++) scanf("%d",&a[m]); maxmin(a,0,k-1,&max,&min); printf("%d %d\n",max,min); } } Input 包含多组测试数据。每组测试数据的第一个元素是整数的个数n,接下来是n个整数。0表示结束。 n<=200 Output 这n个数中的最大值和最小值。 Sample Input 5 1 8 2 4 3 3 2 4 1 0 Sample Output 8 1 4 1如果之前遍历一遍需要比较n-1次,才能得到数组中的最大值和最小值,这显然是不符合预期要求的,这里应该采用的是分治思想。分治法主要有三个步骤:1.分解:将原问题划分为规模较小的几个子问题。2.求解:子问题小到可以求解了,就去求解。3.合并:将子问题的解合并为原问题的解。对于本问题就是不断地进行二分

JS基础语法---函数练习part2---10个综合练习(运用:循环/数组/函数)

主宰稳场 提交于 2019-11-29 01:12:57
练习1:求2个数中的最大值 function getMax(num1, num2) { return num1 > num2 ? num1 : num2; } console.log(getMax(10, 20)); //console.log(getMax); //函数的代码 同: function getMax(num1, num2) { return num1 > num2 ? num1 : num2; } var num1 = 10; var num2 = 20; //函数外面的num和函数的形参num1不是同一个变量 var result = getMax(num1, num2); console.log(result); //同:console.log(getMax); //函数的代码 练习2:求3个数中的最大值 function getThreeMax(x, y, z) { return x > y ? (x > z ? x : z) : y > z ? y : z; } console.log(getThreeMax(10, 34, 90)); 练习3:判断一个数是否是素数(质数) ps: 1. 只能被1和自身整除,质数是从2开始 2. 用这个数字和这个数字前面的所有的数字整除一次(没有1的,没有自身的) function isPrimeNumber(num) {

服务请求数据记录及分析(xlsxwriter绘制散点图)

大兔子大兔子 提交于 2019-11-28 15:50:53
一、背景: 为了统计服务器在不同并发请求数下响应的处理速度,对每一个请求的耗时进行了记录,后面将每个请求通过散点图表示出来,查看响应的分布状态。 txt文档格式,读取到excel后的展示。 二、流程解析 1.读取文件函数 使用f.readlines() 按行读取,最终返回一个列表,每行内容为一个列表中的元素。 2.最小和最大函数 因为excel中图表x轴需要一个浮点数,在excel中1:00:00 时间格式转换为数值为0.04147,所以首先取时间里面最小和最大的时间转换为浮点数为后面图表的范围做准备。 3. 画图函数 使用xlsxwriter只能创建,不能读取和修改文件。 首先使用worksheet.write方法写入原始数据,再通过workbook.add_chart方法添加图表。 三、xlsxwriter使用方法 四、代码 import xlsxwriter import datetime # 数据读取 def read_txt(): content=[] with open('./cptn1','r') as f: content_line=f.readlines() for content_row in content_line: content.append(content_row.strip('\n').split(',')) return content def

应用实例-最大子列和问题

守給你的承諾、 提交于 2019-11-28 13:20:54
目录 最大子列和问题 算法1-暴力破解 算法2-适当优化 算法3-分而治之 算法4-在线处理 算法运行时间比较 最大子列和问题 给定 \(N\) 个整数的序列 \({A_1,A_2,\dots,A_N}\) ,求函数 \(f(i,j)=max\{0,\sum_{k=I}^jA_K\}\) 的最大值。 序列中有多个子列,我们需要从中找出子列和最大的子列。 算法1-暴力破解 /* c语言实现 */ int MaxSubseqSum1(int A[], int N) { int ThisSum, MaxSum = 0; int i, j, j; for(i=0; i<N; i++){ /* i是子列左端位置 */ for (j=i; j<N; j++){ /* i是子列右端位置 */ ThisSum = 0; /* ThisSum是从A[i]到A[j]的子列和 */ for(k=i; k<=j; k++) ThisSum += A[k]; if(ThisSum > MaxSum) /* 如果刚得到的这个子列和更大 */ MaxSum = ThisSum; /* 则更新结果 */ } /* j循环结束 */ } /* i循环结束 */ return MaxSum; } # python语言实现 def max_subseq_sum1(arr: list, n: int): max_sum

最大子数组问题

牧云@^-^@ 提交于 2019-11-27 21:49:37
问题分析: 在一个长为n的数组A[1..n]中,找到这样的i、j,使A[i...j]中元素的和最大,称A[i...j]为最大子数组。 算法一(分治思想): 数组A[low...high]的最大子数组必然满足三种情况: 1)子数组在A[low...mid]中; 2)子数组在A[mid+1,high]中; 3)子数组跨越中点mid。 因此可以使用递归分治方法计算find_max(A, low, high),其中满足: find_max(A, low, high) = max(find_max(A, low, mid), find_max(A, mid+1, high), cross_max(A, low, high)) cross_max(A, low, high)函数的实现方法如下: left-sum = A[mid] sum = 0 for i = mid downto low sum = sum + A[i] if sum > left-sum let-sum = sum max-left = i right-sum = A[mid+1] sum = 0 for j = mid+1 to high sum = sum + A[j] if sum > right-sum right-sum = sum max-right = j return (max-left,max-right

用函数编程计算两整数的最大值,在主函数中调用该函数计算并输出从键盘任意输入的两整数的最大值。

点点圈 提交于 2019-11-27 20:08:48
#include<stdio.h> int GetMax( int a, int b); int main () { int x , y ,max; printf ( "Inputx,y:" ); scanf( " %d %d " ,& x ,& y ); max=GetMax( x , y ); printf ( "max= %d \n" ,max); return 0 ; } int GetMax( int m , int n) { if ( m >=n) return m ; else return n; } 运行结果: 知识点: 1.学会函数参数的调用; 2双分支控制语句的使用。 心得体会: 1.有的函数没有返回值; 2.main()可以有标准参数和返回值。 来源: CSDN 作者: xg_1738241417141 链接: https://blog.csdn.net/xg1738241417141/article/details/78875698

7-7/ 7-8课后例题

浪尽此生 提交于 2019-11-27 13:51:35
1、打擂台算法 1 #include<stdio.h> 2 int main() 3 { 4 int max(int x,int y); 5 int a[10],m,n,i; 6 printf("enter 10 numbers:"); 7 for(i=0;i<10;i++) 8 scanf("%d",&a[i]); 9 printf("\n"); 10 for(i=0,m=a[0],n=0;i<10;i++) 11 { 12 if(max(m,a[i])>m) 13 {m=max(m,a[i]); 14 n=i; 15 } 16 } 17 printf("The largest number is %d\n is the%dth number\n",m,n+1); 18 } 19 int max(int x,int y) 20 { 21 return(x>y?x:y); 22 } 2、一维数组名做函数参数求平均值 1 #include<stdio.h> 2 int main() 3 { 4 float average(float array[10]); 5 float score[10],aver; 6 int i; 7 printf("input 10 scores:\n"); 8 for(i=0;i<10;i++) 9 scanf("%f",&score[i]); 10

函数的调用

强颜欢笑 提交于 2019-11-27 08:36:31
函数的调用 一、什么是函数调用 函数名(…) 即调用函数,会执行函数体代码,直到碰到return或者 执行完函数体内所有代码 结束。 二、为何要调用函数 使用函数的功能 三、函数调用的一些形式 def max(x,y): if x>y: return x else: return y max(1,2) #函数名加括号参数直接调用 print(max(1,2)) #输出它的返回值 reg = max(1,2)*12 #将返回值加算术运算然后赋值给 reg print(reg) #函数的嵌套使用 max(max(1,2),3) #将函数的返回值当做参数传入新的函数 print(max(max(1,2),3)) #输出它 来源: https://www.cnblogs.com/wwbplus/p/11354937.html

方格取数(多线程dp,深搜)

旧时模样 提交于 2019-11-26 23:16:34
https://www.luogu.org/problem/P1004 题目描述 设有 N × N的方格图 ( N ≤ 9 ),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例): 某人从图的左上角的 A点出发,可以向下行走,也可以向右走,直到到达右下角的 B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字 0)。 此人从 A 点到 B 点共走两次,试找出 2条这样的路径,使得取得的数之和为最大。 输入格式 输入的第一行为一个整数 N (表示 N × N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的 0表示输入结束。 输出格式 只需输出一个整数,表示 2 条路径上取得的最大的和。 输入输出样例 输入 8 2 3 13 2 6 6 3 5 7 4 4 14 5 2 21 5 6 4 6 3 15 7 2 14 0 0 0 输出 67 第一种方法(深搜): 这道题深搜的最优方法就是两种方案同时从起点出发。因为如果记录完第一种方案,再计算第二种方案,不可控的因素太多了,大多都不是最优解→_→, 但两种方案同时执行就行,因为这可以根据当前的情况来判断最优。 总的来说,每走一步都会有四个分支(你理解成选择或者情况也可以): 1、两种都向下走 2、第一种向下走,第二种向右走 3、第一种向右走

2013-8-7

☆樱花仙子☆ 提交于 2019-11-26 19:14:15
I Hate It Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 69 Accepted Submission(s) : 34 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。 Input 本题目包含多组测试,请处理到文件结束。 在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。 学生ID编号分别从1编到N。 第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。 接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。 当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。 当C为'U'的时候,表示这是一条更新操作