数组公式

Excel常用技巧

半腔热情 提交于 2020-01-18 03:39:56
快捷键 Excel的快捷键很多,以下主要是能提高效率。 Ctrl+方向键,对单元格光标快速移动,移动到数据边缘(空格位置)。 Ctrl+Shift+方向键,对单元格快读框选,选择到数据边缘(空格位置)。 Ctrl+空格键,选定整列。 Shift+空格键,选定整行。 Ctrl+A,选择整张表。 Alt+Enter,换行。 Ctrl+Enter,以当前单元格为始,往下填充数据和函数。 Ctrl+S,快读保存,你懂的。 Ctrl+Z,撤回当前操作。 如果是效率达人,可以学习更多快捷键。Mac用户的Ctrl一般需要用command替换。 格式转换 Excel的格式及转换很容易忽略,但格式会如影随形伴随数据分析者的一切场景,是后续SQL和Python数据类型的基础。 通常我们将Excel格式分为数值、文本、时间。 数值常见整数型 Int和小数/浮点型 Float。两者的界限很模糊。在SQL和Python中,则会牵扯的复杂,涉及运算效率,计算精度等。 文本分为中文和英文,存储字节,字符长度不同。中文很容易遇到编码问题,尤其是Python2。Win和Mac环境也有差异。大家遇到的乱码一般都属于中文编码错误。 时间格式在Excel中可以和数值直接互换,也能用加减法进行天数换算。 时间格式有不同表达。例如2016年11月11日,2016/11/11,2016-11-11等。当数据源多就会变得混乱

50道经典的java程序题

好久不见. 提交于 2020-01-18 00:06:35
JAVA基础编程练习50题 本文对50道经典的java程序题进行详细解说,对于初学者可以跳过一些逻辑性太强的题目,比如第一题用到了方法的递归,初学者可能不理解,最好先看那些有if、for、while可以简单解决的程序题!但是,对于比较深入学习过的同学,还是希望可以一口气就看完,这是比较全面思维锻炼! 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21…. 做这种题目,最好的做法就是找出规律,跟高中的数列一样 本题有:a[n]=a[n-1]+a[n-1],而第一第二项都知道了,后面的值也可以求得 public class Programme1 { public static void main(String[] args) { System.out.print("请输入你想知道的兔子数量的月份:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();//获取输入的整数 System.out.println("第" + n + "个月兔子总数为" + fun(n)); scanner.close(); } /** *

通过例子进阶学习C++(六)你真的能写出约瑟夫环么

旧街凉风 提交于 2020-01-17 10:07:20
本文是通过例子学习C++的第六篇,通过这个例子可以快速入门c++相关的语法。 1.问题描述 n 个人围坐在一个圆桌周围,现在从第 s 个人开始报数,数到第 m 个人,让他出局;然后从出局的下一个人重新开始报数,数到第 m 个人,再让他出局......,如此反复直到所有人全部出局为止。 2.问题分析及用数组求解 约瑟夫环是经典的算法问题,如同“一千个读者就有一千个哈姆雷特”,该问题每个人都有不同的解答。常见的有:数组;单向循环链表;静态链表;双向链表;队列;递推公式 ...... 首先简化问题,从s=1开始数,通过数组实现需要: ​ 数组 bool a[1000],可能会浪费了大量的存储空间; ​ 变量 t 从s=1开始数,指示当前数组的位置; ​ 变量 f 记录出局人数; ​ 变量 s 从1到m; 整个过程一个do-while循环即可实现,但理解起来却是非常“拗口”。 代码如下: #include<iostream> using namespace std; int n,m,s,f,t; bool a[1000]; int main() { cin>>n>>m; //共n人,从1开始数,数到m出局 for (int i=1;i<=n;++i){ a[i]=false; } t=0;//从数组a的a[1]开始...记录数组a的第t个位置 f=0;//记录出局人数 s=0;/

Educational Codeforces Round 80 (Rated for Div. 2)

会有一股神秘感。 提交于 2020-01-17 02:05:45
前言 D 题看起来就像是二分,但不知道怎么写 check ,而且二分不熟……每次写二分的时候都担惊受怕。干脆花了一晚上总结了一下各种二分的写法。以后写二分应该没有那么慌了。 二分的总结明天或后天再写吧。留个坑在这里。 限时只做了 A、B、C 三题,D 题后面补了。 E、F 题估计是不补了。以后有机会再康康吧。 比赛链接 题解 A. Deadline 题目大意 给定 \(n, d\) 判断是否存在一个整数 \(x\) 使得 \(x + \lceil\dfrac{d}{x + 1}\rceil \le n\) 分析 一波数学推导有: \[ x + \lceil\dfrac{d}{x + 1}\rceil = x + 1 + \lfloor\dfrac{d}{x + 1}\rfloor = \lfloor x + 1 +\dfrac{d}{x + 1}\rfloor \ge \lfloor2\sqrt{d}\rfloor \] 当且仅当 \((x + 1)^2 = d\) 也就是 \(x = \sqrt d - 1\) 的时候取得最小值。 直接算出 \(x\) 和 \(x + 1\) 时 \(x + \lceil\dfrac{d}{x + 1}\rceil\) 的值,代入与 \(n\) 判断即可。 代码 B. Yet Another Meme Problem 题目大意 给定 \(A, B

Numpy基础入门(6)统计函数和排序

ⅰ亾dé卋堺 提交于 2020-01-16 09:59:26
统计函数 1.numpy.amin() 和 numpy.amax(),这些函数从给定数组中的元素沿指定轴返回最小值和最大值。 >>>import numpy as np >>>a = np.array([[3,7,5],[8,4,3],[2,4,9]]) >>>a array([[3, 7, 5], [8, 4, 3], [2, 4, 9]]) >>>np.amin(a,1) array([3, 3, 2]) >>>np.amin(a,0) array([2, 4, 3]) >>>np.amax(a) 9 >>>np.amax(a, axis = 0) array([8, 7, 9]) 2.numpy.ptp()函数返回沿轴的值的范围(最大值 - 最小值)。 >>>import numpy as np >>>a = np.array([[3,7,5],[8,4,3],[2,4,9]]) >>>a array([[3,7,5],[8,4,3],[2,4,9]]) >>>np.ptp(a) 7 >>>np.ptp(a, axis = 1) array([4, 5, 7]) >>>np.ptp(a, axis = 0) array([6, 3, 6]) 3.numpy.percentile()百分位数是统计中使用的度量,表示小于这个值得观察值占某个百分比。 函数numpy

树状数组解题模版

送分小仙女□ 提交于 2020-01-16 08:14:23
树状数组 一、树状数组概念 Binary Indexed Tree ,用于维护前缀信息的结构,对前缀信息处理也十分高校,用于解决前缀信息问题和区间类问题。 比如:给定一个数组,实现两个函数 update (int index,int val),将数组下标为index的元素改为val querySum (int start,int end),返回区间内元素和 这两个用线段树求过很多遍了。树状数组也是通过前缀和的思想来完成单点更新和区间查询。它比线段树用的空间更小,速度更快。 二、树状数组算法分析 注意 :树状数组的下标从 1 开始计数。定义数组 C 是一个对原始数组 A 的预处理数组。 由原数组构造树状数组 结论 :C[i]来自几个数组A中的元素:取决于i的二进制末尾有几个连续的0。比 如有k个0,那么C[i]来自2 k 个A中的元素。 如果i是当前位置,当前有2 k 个来自A中的元素,有哪2 k 个呢?就是从C[i]的正下方出发,往前数2 k 个,C[i]就是这2 k 个数的和。 定义一个 lowbit(i) = 2^k 函数,就是把下标i传到函数中来,返回2 k ,lowbit表示C[i]这个数值是由A中的多少个元素相加得来的。(根据上面一段,你还能找到这几个元素是啥,从C[i]的正下方开始往前数2 k 个) 怎么找父亲节点? i+lowbit(i) = 父亲 比如C[4]

Skr-Eric的数据分析课堂(四)--Numpy的常用函数(上)

a 夏天 提交于 2020-01-16 05:34:07
Numpy的常用函数 1.读取矩阵文件 xxx,xxx,xxx,xxx xxx,xxx,xxx,xxx xxx,xxx,xxx,xxx 由若干行若干列的数据项组成,每行数据的项数必须相等,每列数据项的类型必须相同,而且数据项之间有明确的分隔符。 np.loadtxt( 文件路径, delimiter=分隔符字符串, usecols=选择列集, unpack=是否按列展开(缺省False), dtype=目标类型(缺省float), converters=转换器字典)-> 一个二维(unpack=False)或多个一维数组(unpack=True) # -*- coding: utf-8 -*- from __future__ import unicode_literals import datetime as dt import numpy as np import matplotlib.pyplot as mp import matplotlib.dates as md # 将日-月-年格式的日期变为年-月-日格式的转换器函数 def dmy2ymd(dmy): # 将UTF-8编码的字节串转换为UCS-4编码字符串 dmy = str(dmy, encoding='utf-8') ''' d, m, y = dmy.split('-') ymd = y + "-" + m +

EDU div2#80 真丶被教育场

主宰稳场 提交于 2020-01-16 02:38:47
许久没打cf果然会变的好捞 C. Two Arrays 题目链接: https://codeforces.com/contest/1288/problem/C 题目大意 有两个长度为m的数组 a,b,a 非降序,b非升序 bi>=ai 1<=ai,bi<=n 问满足条件的 a b数组有多少个 将B数组翻转一下 bm>=am 则原题变为长度为2m的非降序数组有多少个,这就是个十分煞笔的DP #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e5+7; const ll mod=1e9+7; int dp[1007][22]; int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) dp[i][1]=1; for(int j=1;j<=n;j++) { for(int i=2;i<=m*2;i++) { dp[j][i]=(dp[j][i-1]+dp[j-1][i-1])%mod; } } ll sum=0; for(int i=1;i<=n;i++) { sum+=dp[i][m*2]; sum%=mod; } cout<<sum<<endl; } 当然也有其他的很多好的方法,比如 翻转+公式法 C(2m,2m+n-1)

C语言06-函数的调用过程II、数组

[亡魂溺海] 提交于 2020-01-13 18:20:18
文章目录 函数调用过程 栈帧的概念 数组 sizeof 函数调用过程 函数调用过程中的步骤: 按照调用约定传参 保存返回地址 流程转移 保存上一层栈帧地址 开辟局部变量空间 开始执行被调用函数的代码 详细得展示各个步骤。 栈帧的概念 我们已经知道,因为每个函数被调用过程,那个函数的参数、局部变量、返回地址, 都会放在一断 特定的栈区域中 ,并且 每个被调用的函数,都对应了一段特定的栈区 域,那一段特定的栈区域 ,称为 那一个被调用函数的栈帧 。 void Fun2(int arg) { int nValue = 0; printf("fun2:%08X, %p\r\n", &arg, &nValue); } void Fun1(int arg) { int nValue = 0; Fun2(0x22222222); printf("fun1:%08X, %p\r\n", &arg, &nValue); } int main(int argc, char* argv[]) { printf("main:%p\r\n", &argc); Fun1(0x11111111); return 0; } 通过以上代码可以验证,紧挨着返回地址的“栈帧”,确实是指向了 上一层调用方的栈帧 ,这种设计,使得当前函数结束后,程序流程都可以顺利地找到上一层栈帧。 通过以上的图和代码实验

C语言08-数组II:数组传参、二维数组

泄露秘密 提交于 2020-01-13 17:35:21
文章目录 二维数组 二维数组寻址公式 数组传参 二维数组 二维数组寻址公式 对于 type ary2D[M][N] 其ary2D[i][j]语速对应的地址是: a r y 2 D + ( i × N + j ) × s i z e o f ( t y p e ) ary2D+(i\times N+j)\times sizeof(type) a r y 2 D + ( i × N + j ) × s i z e o f ( t y p e ) char g_Data[6]; void SetElement23(int nRow, int nCol, char chValue) { g_Data[nRow * 3 + nCol] = chValue; } void SetElemet32(int nRow, int nCol, char chValue) { g_Data[nRow * 2 + nCol] = chValue; } int main(int argc, char* argv[]) { SetElement23(1, 2, 'a'); SetElemet32(2, 0, 'b'); return 0; } 数组传参 预测以下代码结果( 还需要看 ) void Fun(char chAry[30]) { printf("%d\r\n", sizeof(chAry)); }