int函数

高精度(加减乘除

走远了吗. 提交于 2020-03-05 22:10:55
https://www.cnblogs.com/ECJTUACM-873284962/p/6509429.html 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<string> 6 #include<cmath> 7 #include<set> 8 #include<vector> 9 #include<stack> 10 #include<queue> 11 #include<map> 12 using namespace std; 13 #define ll long long 14 #define se second 15 #define fi first 16 const int INF= 0x3f3f3f3f; 17 const int N=4e6+5; 18 19 string s1,s2; 20 int a[2001],b[2001],c[4002],len1,len2; 准备工作 1 void cun() 2 { 3 cin>>s1>>s2; 4 len1=s1.length(); 5 len2=s2.length(); 6 for(int i=1;i<=len1;i++) 7 a[i]=s1[len1-i]-'0'; 8

寻找最大子序列和

浪子不回头ぞ 提交于 2020-03-05 20:22:00
问题: 给定一组数据,寻找该组数据中最大的子序列和,为简便计算,当子序列和为负数的时候,设定和为0。 例如给定数据为4 -3 5 -2 -1 2 6 -2,其最大子序列和为4 -3 5 -2 -1 2 6组成的11 问题分析: 首先考虑最简单的遍历方法,考虑到所有的子序列情况,但是考虑到时间复杂度达到O(n³),即使优化后也达到O(n²),遂放弃。 对于此类问题,考虑使用分而治之的方法,即对于该题目的分析为:一组数据的最大子序列和对应的子序列可能出现在原数据的左半侧,也可能出现在右半侧,还可能由左右两侧的各一部分组合而成(这两部分必须连接起来)。 算法设计: 采取分而治之的算法策略,首先将数据分为左右两部分,递归求出左右两部分的最大值。 为了控制左右两部分,可以通过向函数中传递数组以及左右下标来进行控制。 当递归到数据序列只有一个数据的时候,即左侧下标等于右侧下标的时候,返回该数据。对于最大子序列和出现在中间的情况来说,首先需要循环找到包含左侧最后一个数据的最大子序列和,之后找到右侧第一个数据的最大子序列和,之后将其相加。最后将三种情况进行比较,返回最大值即可。 注意对子序列和为负数的情况,进行和为0处理。 代码: int MaxSubSum(int A[],int Left,int Right) { if(Left==Right) { if(A[Left]>0) return A

组合数学总结

限于喜欢 提交于 2020-03-05 19:59:14
问题 E: 【排列组合问题】Jam的计数法 题目描述 囚犯之间的秘密交流使用一种被称为Jam的计数法,这种计数法不使用阿拉伯数字计数,而是使用小写英文字母计数,每个数字的位数都是相同的(使用相同个数的字母),英文字母按原先的顺序,排在前面的字母小于排在它后面的字母。在 Jam数字中,每个字母互不相同,而且从左到右是严格递增的。每次,Jam计数法还指定使用字母的范围,例如,从2到10,表示只能使用{b,c,d,e,f, g,h,i,j}这些字母。如果再规定位数为5,那么,紧接在Jam数字“bdfij”之后的数字应该是“bdghi”。(如果用U、V依次表示 Jam数字“bdfij”与“bdghi”,则U<V,且不存在Jam数字P,使U<P<V)。作为联络员的邪狼,他的任务是:对于从文件读入的一个 Jam数字,按顺序输出紧接在后面的5个Jam数字,如果后面没有那么多Jam数字,那么有几个就输出几个。 输入 有2行,第1行为3个正整数,用一个空格隔开:s t w(其中,s为所使用的最小的字母的序号,t为所使用的最大的字母的序号。w为数字的位数,这3个数满足:1≤s<t≤26,2≤w≤t-s ) 第2行为具有w个小写字母的字符串,为一个符合要求的Jam数字。 输出 最多为5行,为紧接在输入的Jam数字后面的5个Jam数字,如果后面没有那么多Jam数字,那么有几个就输出几个

递归算法

℡╲_俬逩灬. 提交于 2020-03-05 19:55:21
直接或间接调用函数本身,则该函数称为递归函数。 舍得舍得,有舍才有得。 递归递归,有递才有归。 递归,先确定终止条件或者说是出口。当参数为何值时,递归结束,之后直接把结果返回。注意,确定出口时前几个数可能不能用规律得出,需要一 一确定下来。 再根据不同的条件进行变化,即找出函数的等价关系式。 举一个简单例子 Fibonacci具体 : int fib ( int n ) { if ( n <= 1 ) return 1 ; return fib ( n - 1 ) + fib ( n - 2 ) ; } 再举个经典例子阶乘 int f ( int n ) { if ( n == 0 ) return 1 ; else return n * f ( n - 1 ) ; } 实际上递归虽然看似很精简,实际效率很低,时间复杂度可达到O(2^N )。 递归调用实际上是函数自己在调用自己,而函数的调用开销是很大的,系统要为每次函数调用分配存储空间,并将调用点压栈予以记录。而在函数调用结束后,还要释放空间,弹栈恢复断点。所以说,函数调用不仅浪费空间,还浪费时间。 ——作者:Clemente 链接:https://www.jianshu.com/p/7a10b0221964 来源: CSDN 作者: 恋霏雨 链接: https://blog.csdn.net/z2431435/article

调整数组顺序使奇数位于偶数前面 --剑指offer

☆樱花仙子☆ 提交于 2020-03-05 16:47:45
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 方法1: 开辟另一个数组,对原有的数组扫描两次,第一次扫描往新的数组中放奇数,第二次放偶数。 public class Solution { public void reOrderArray(int [] array) { int[] tem=new int[array.length]; int j =0; for(int i =0;i<array.length;i++){ if((array[i]&1) != 0){ tem[j++]=array[i]; } } for(int i =0;i<array.length;i++){ if((array[i]&1) == 0){ tem[j++]=array[i]; } } for(int i=0;i<array.length;i++){ array[i]=tem[i]; } } } 方法2:用两个标志odd,even,都指向0位置。even从0开始往后移动,遇到偶数继续移动,奇数则停下 和odd换位置 并把odd和even中间的元素依次向后移动,这样做的目的是防止相对位置改变; public class Solution { public void

求链式表的表长

删除回忆录丶 提交于 2020-03-05 13:59:34
本题要求实现一个函数,求链式表的表长。 函数接口定义: int Length( List L ); 其中 List 结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode List; L 是给定单链表,函数 Length 要返回链式表的长度。 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode List; List Read(); /* 细节在此不表 */ int Length( List L ); int main() { List L = Read(); printf("%d\n", Length(L)); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 1 3 4 5 2 -1 输出样例: 5 AC code: int Length( List L ) { int len = 0;

用顺序表实现求两个集合的并集

荒凉一梦 提交于 2020-03-05 13:59:15
#include<iostream.h> #include<malloc.h> #include<limits.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #include<stdlib.h> #include<process.h> #define OK 1 #define INIT_LiST_SIZE 100//顺序表的初始长度 #define LIST_ADD 10//顺序表每次增加的长度 #define ERROR 0 #define OVERFLOW 3 typedef int Elemtype; typedef struct { Elemtype *elem;//顺序表的基地址 int length;//顺序表的当前长度 int listsize;//顺序表分配的长度 }SqList; void InitList(Sqlist &La)//初始化顺序表 { La.elem=(Elemtype *)malloc(INIT_LIST_SIZE*sizeof(int));//开辟100个一连串的地址,并强制转化为Elemtype类型 La.length=0;//顺序表的当前长度为0 La.listsize=100;//目前顺序表的总长度 } Elemtype ListInsert(Sqlist &La

面试题—三个数之和小于某个值的组合个数

对着背影说爱祢 提交于 2020-03-05 13:59:07
本题是阿里蚂蚁金服面试题: 给定一个数组s,和一个数a,在数组s里面找到3个数使这3个数的和小于a,即s[i]+s[j]+s[k]<a,请你设计一个函数返回数组s里这样的组合有多少个? int f ( double s [ ] , double a ) { int cnt = 0 ; Arrays . sort ( s ) ; int i = 0 ; int j = s . length ; while ( i < j - 1 ) { int low = i ; int high = j ; while ( low < high ) { int k = ( low + high ) / 2 ; if ( s [ i ] + s [ j ] + s [ k ] >= a ) { high = k - 1 ; } else if ( s [ i ] + s [ j ] + s [ k ] < a ) { // 下面区间都是满足的 cnt += k - low ; // 二分查找 low = k + 1 ; } } // 扫描结束,根据情况移动上下限 if ( s [ i ] + s [ j ] > a ) { j -- ; } else { i ++ ; } } return cnt ; } 来源: CSDN 作者: JeemyJohn 链接: https://blog.csdn

详解 Lambda表达式

喜你入骨 提交于 2020-03-05 11:54:00
Lambda表达式 概述 : Lambda 是一个 匿名函数 , 我们可以把 Lambda表达式理解为是一段 可以传递的代码 (将代码像 数据 一样进行传递) 可以写出 更简洁 、 更灵活 的代码。 作为一种 更紧凑 的代码风格,使Java的语言 表达能力 得到了提升 首先,本人要声明的一点是: Lambda表达式 仅适用于 函数式接口 (函数式接口:只含有一个抽象方法的接口) 那么,现在,本人就通过对于例子的简化,来讲解Lambda表达式的语法要求: 首先,本人来给出一个接口: package edu.youzg.about_new_features.core.about_jdk8.core; public interface MyInterface { Object add(int a,int b); } 那么,我们以往想要在使用这个接口的话,就要按如下的格式: package edu.youzg.about_new_features.core.about_jdk8.core; public class Test { public static void main(String[] args) { MyInterface myInterface = new MyInterface() { @Override public Object add(int a, int b) {

leetcode787 - Cheapest Flights Within K Stops - medium

我是研究僧i 提交于 2020-03-05 04:30:23
There are n cities connected by m flights. Each fight starts from city u and arrives at v with a price w. Now given all the cities and fights, together with starting city src and the destination dst, your task is to find the cheapest price from src to dst with up to k stops. If there is no such route, output -1. Example 1: Input: n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]] src = 0, dst = 2, k = 1 Output: 200 Explanation: The graph looks like this: The cheapest price from city 0 to city 2 with at most 1 stop costs 200, as marked red in the picture. 1.DFS with prune。 函数头private void dfs(int