num

周志华机器学习第四章例题4.4

元气小坏坏 提交于 2020-03-03 16:00:55
例题4.4的结果和书上画的图不一样,但是没问题,原因是GINI指数取最小值的时候,色泽和脐部值是一样的。 import numpy as np dataset = np . array ( [ [ 0 , 0 , 0 , 0 , 0 , 0 , 1 ] , [ 1 , 0 , 1 , 0 , 0 , 0 , 1 ] , [ 1 , 0 , 0 , 0 , 0 , 0 , 1 ] , [ 0 , 0 , 1 , 0 , 0 , 0 , 1 ] , [ 2 , 0 , 0 , 0 , 0 , 0 , 1 ] , [ 0 , 1 , 0 , 0 , 1 , 1 , 1 ] , [ 1 , 1 , 0 , 1 , 1 , 1 , 1 ] , [ 1 , 1 , 0 , 0 , 1 , 0 , 1 ] , [ 1 , 1 , 1 , 1 , 1 , 0 , 0 ] , [ 0 , 2 , 2 , 0 , 2 , 1 , 0 ] , [ 2 , 2 , 2 , 2 , 2 , 0 , 0 ] , [ 2 , 0 , 0 , 2 , 2 , 1 , 0 ] , [ 0 , 1 , 0 , 1 , 0 , 0 , 0 ] , [ 2 , 1 , 1 , 1 , 0 , 0 , 0 ] , [ 1 , 1 , 0 , 0 , 1 , 1 , 0 ] , [ 2 , 0 , 0 , 2 , 2 , 0

FFT题集

无人久伴 提交于 2020-03-03 09:46:42
FFT学习参考这两篇博客,很详细,结合这看,互补。 博客一 博客二 很大一部分题目需要构造多项式相乘来进行计数问题。 1. HDU 1402 A * B Problem Plus 把A和B分别当作多项式的系数。 #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> using namespace std; const double PI = acos(-1.0); const int maxn = 5e4+50; struct Complex { double real,image; ///实部和虚部 Complex(double _real,double _image) { real = _real; image = _image; } Complex(){} }; Complex operator + (const Complex &c1,const Complex &c2) { return Complex(c1.real+c2.real,c1.image+c2.image); } Complex operator - (const Complex &c1,const Complex &c2) { return Complex(c1.real-c2.real,c1.image-c2

C语言程序设计100例之(30):删数问题

99封情书 提交于 2020-03-03 09:41:02
例30 删数问题 问题描述 从键盘输入一个高精度正整数num(num不超过250位),任意去掉S个数字后剩下的数字按原先后次序将组成一个新的正整数。编写一个程序,对给定的num和s,寻找一种方案,使得剩下的数字组成的新数最小。 输入格式 num (高精度的正整数)和S(需要删除的数字个数)。 输出格式 最后剩下的最小数。 输入样例 51428397 5 输出样例 123 (1)编程思路。 由于键盘输入的是一个高精度正整数num(num不超过250位),因此用字符串数组来进行存储。 为了尽可能地逼近目标,选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符。然后回到串首,按上述规则再删除下一个数字。重复以上过程s次,剩下的数字串便是问题的解了。 也就是说,删数问题采用贪心算法求解时,采用最近下降点优先的贪心策略:即x1<x2<…<xi<xj;如果xk<xj,则删去xj,得到一个新的数且这个数为n-1位中为最小的数N1,可表示为x1x2…xixkxm…xn。对N1而言,即删去了1位数后,原问题T变成了需对n-1位数删去k-1个数的新问题T′。新问题和原问题相同,只是问题规模由n减小为n-1,删去的数字个数由k减少为k-1。基于此种删除策略,对新问题T′,选择最近下降点的数进行删除

C语言程序设计100例之(32):组合问题

元气小坏坏 提交于 2020-03-03 09:39:13
例32 组合问题 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 例如n=5,r=3,所有组合为:123,124,125,134,135,145,234,235,245,345。 输入格式 一行两个自然数n,r(1<n<21,1≤r≤n)。 输出格式 所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。 输入样例 5 3 输出样例 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5 (1)编程思路。 用递归来完成。 设函数void dfs(int pos,int num)表示为第pos(0≤pos≤r-1)个数取值,取值可以为num~n之一。显然,若r-pos>n-num+1,则后面剩下的数不够,直接剪枝;否则,在num~n中取一个数i(num≤i≤n)赋给a[pos],继续为下一个位置pos+1取数,即递归调用函数dfs(pos+1,i+1)。 (2)源程序。 #include <stdio.h> int a[21],n,r; void dfs(int pos,int num) { if (pos==r) // 已有r个数 { for

C语言程序设计100例之(29):拉丁方阵

非 Y 不嫁゛ 提交于 2020-03-03 08:28:12
例29 拉丁方阵 问题描述 构造 NXN 阶的拉丁方阵,使方阵中的每一行和每一列中数字1到N只出现一次。如N=4时: 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 输入格式 一个正整数n(2<=n<=9)。 输出格式 生成的n*n阶方阵。 输入样例 4 输出样例 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 (1)编程思路。 观察给出的例子,可以发现:若将每一行中第一列的数字和最后一列的数字连起来构成一个环,则该环正好是由1到N顺序构成;对于第i行,这个环的开始数字为i。按照此规律可以很容易的写出程序。 (2)源程序。 #include <stdio.h> int main() { int n; scanf("%d",&n); int i,k,t; for(i=0; i<n; i++) { t=i%n; // 确定该拉丁方阵第i行的第一个元素的值 for(k=0; k<n; k++) // 按照环的形式输出该行中的各个元素 printf("%d ",(k+t)%n+1); printf("\n"); } return 0; } 习题29 29-1 奇数阶魔方 本题选自杭州电子科技大学OJ题库 (http://acm.hdu.edu.cn/showproblem.php?pid=1998) Problem Description 一个 n

人民币大写转换工具C++

ぐ巨炮叔叔 提交于 2020-03-03 01:42:21
人民币大写转换规则 中文大写金额数字应用正楷或行书填写,如壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整(正)等字样。不得用一、二(两)、三、四、五、六、七、八、九、十、廿、毛、另(或0)填写,不得自造简化字。如果金额数字书写中使用繁体字,如贰、陆、亿、万、圆的,也可。 中文大写金额数字到"元"为止的,在"元"之后,应写"整"(或"正")字,在"角"之后,可以不写"整"(或"正")字。大写金额数字有"分"的,“分"后面不写"整”(或"正")字。 中文大写金额数字前应标明"人民币"字样,大写金额数字有"分"的,“分"后面不写"整”(或"正")字。 中文大写金额数字前应标明"人民币"字样,大写金额数字应紧接"人民币"字样填写,不得留有空白。大写金额数字前未印"人民币"字样的,应加填"人民币"三字。在票据和结算凭证大写金额栏内不得预印固定的"仟、佰、拾、万、仟、佰、拾、元、角、分"字样。 人民币大写转换工具(支持任意位金额转换) # include <iostream> # include <string> # include <sstream> using namespace std ; /* 案例: 1234.09 0.00 0.09 1002.03 01002.4032 120000.34 12000000000000003400000056 */ /

序号互换

无人久伴 提交于 2020-03-03 01:25:20
序号互换 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐标快速计算出来。单元格的行坐标是由数字编号的数字序号,而列坐标使用字母序号。观察字母序号,发现第1列到第26列的字母序号分别为A,B,…,Z,接着,第27列序号为AA,第28列为AB,依此类推。 若给Dr.Kong的机器人卡多一个数字序号(比如32),它能很快算出等价的字母序号(即AF),若给机器人一个字母序号(比如AA)),它也能很快算出等价的数字序号(27),你能不能与卡多比试比试,看谁能算得更快更准确。 输入 第一行: N 表示有多少组测试数据。 接下来有N行, 每行或者是一个正整数,或者是一个仅由大写字母组成的字符串。 输入保证,所有数字序号和字母序号对应的数字序号均 ≤ 2*10^9 输出 对于每一行测试数据,输出一行。如果输入为一个正整数序号,则输出等价的字母序号;如果输入为字符串,则输出等价的数字序号。 样例输入 3 27 G AA 样例输出 AA 7 27 1 #include<iostream> 2 #include<cstdio> 3 #include<stack> 4 #include<string.h> 5 using namespace std; 6 7 stack<char> s; 8 9 int

c 可变参数demo

安稳与你 提交于 2020-03-03 00:53:55
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdarg.h> int average(int num, ...); int main() { int averageRes = average(3, 1, 3, 5); printf("average:%d\n", averageRes); return 0; } int average(int num, ...) { va_list list; int sum = 0; va_start(list, num); for (int i = 0; i < num; i++) { sum += va_arg(list, int); } return sum / num; } 来源: https://www.cnblogs.com/luckygxf/p/12399181.html

20180318 代码错题(3)

时光怂恿深爱的人放手 提交于 2020-03-02 21:14:24
在C语言中,以下代码执行之后,*p的值为() void func(int *p) { static int num = 4; p = &num; (*p)--; } int main() { int i = 5; int *p = &i; func(p); printf( "%d" , *p); return 0; } 3 4 5 以上都不是答案 C  错选 B 在函数里,指针p又重新定位成num的地址空间,所以在函数中的自减是修改num的值;而当在main函数中的p指针依然指向 i 的地址空间,在func中没有被修改,那么值不变; 如果函数去掉num,如下: void func(int *p) { (*p)--; } 此时,就是修改 main函数中 i 的值了。 详细分析: 如上图,当调用函数的时候,形参指针p会指向实参指针p 所指向的地址空间; 在题目的 func 函数中,形参指针p 指向了新的地址空间num,如下图: 那么此时修改形参p 所指向地址空间的值,是不会影响 实参指针p和i 的值。 尽管函数的形参是指针,但是注意,它仍然是“值传递”。 一方面,函数本身没有任何返回;另一方面,函数只是对p的值的处理,并非p的地址。 函数调用时,p作实参,函数中也给p重新赋值,函数确实使静态局部变量num的值减1,但是函数执行完,返回到主函数中,p中的仍然是i的地址。