随笔分类 -  Unclassified

摘要:一、概念 树的路径长度:树的路径长度是从树根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。 结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数。 结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积。 树的带权路径长度(Weighted Path Length of Tree):定义为树中所有叶结点的带权路径长度之和,通常记为:其中: n表示叶子结点的数目 wi和li分别表示叶结点ki的权值和根到结点ki之间的路径长度。 树的带权路径长度亦称为树的代价。 哈夫曼树或最优二叉树:在权为wl,w2,…,w... 阅读全文
posted @ 2012-08-08 13:45 加拿大小哥哥
摘要:一、定义 二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉查找树或者是空树,或者是满足如下性质的二叉树: ①若它的左子树非空,则左子树上所有结点的值均小于根结点的值; ②若它的右子树非空,则右子树上所有结点的值均大于根结点的值; ③左、右子树本身又各是一棵二叉查找树。 上述性质简称二叉查找树性质(BST性质),故二叉查找树实际上是满足BST性质的二叉树。二、特点 由BST性质可得: (1) 二叉查找树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字。 (2) 二叉查找树中,各结点关键字是惟一的。注意:实际应用中,不能保... 阅读全文
posted @ 2012-08-08 13:30 加拿大小哥哥
摘要:int main(int argc, char * argv[]){……}参数argc就代表启动程序时,命令行参数的个数。C/C++语言规定,可执行程序程序本身的文件名,也算一个命令行参数,因此,argc的值至少是1。参数argv是一个数组,其中的每个元素都是一个char* 类型的指针,该指针指向一个字符串,这个字符串里就存放着命令行参数。argv[0]指向的字符串就是第一个命令行参数,即可执行程序的文件名argv[1]指向第二个命令行参数argv[2]指向第三个命令行参数……。#include <stdio.h>int main(int argc, char * argv[]){ 阅读全文
posted @ 2012-08-06 14:47 加拿大小哥哥
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>int len1,len2;int c[111];int my_compare(int *a,int *b){ int flag;int i; int max=(len1>=len2?len1:len2); /* 实际上还可以先判断长度,若长度不同,则必然一大一小 长度相同时才用到下面的for循环 */ /* if(len1>len2) return 1; if(len1<len2) return -1; 这样输... 阅读全文
posted @ 2012-07-25 17:14 加拿大小哥哥
摘要:#include<stdio.h> #include<string.h> int len;void plus(int a[],int b[]){ int i; len=a[0]>b[0]?a[0]:b[0]; for(i=1;i<=len;i++) { a[i]+=b[i]; if(a[i]>=10) { a[i+1]++; a[i]=a[i]%10; } } if(a[len+1]!=0) len++;//a[0]是加数的长度 a[0]=len; }int main() { int i; char str1[401],str2[401]; int a 阅读全文
posted @ 2012-07-07 12:20 加拿大小哥哥
摘要:#include<stdio.h>int main(){ int k,i,j;int num=1,n; int a[100][100]; scanf("%d",&n);// for(i=1;i<=n;i++) // for(j=1;j<=n;j++) // scanf("%d",&a[i][j]); for(k=2;k<=2*n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i+j==k&&(k&1)) a[i][j]=num++; 阅读全文
posted @ 2012-06-10 21:58 加拿大小哥哥
摘要:如何判断一个4*4的数组中所有的元素都不相同,一个4*4的二维数组,判断数组中每个元素是否相同 如相同就返回0 都不相同就返回1int fun(int a[4][4]){ int i = 0, j = 0; int m = 0, n = 0; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { for (m = i; m < 4; m++) { for (n = j + 1; n < 4; n++) { if (a[i][j] == a[m][n]) { return 0; } ... 阅读全文
posted @ 2012-06-10 20:51 加拿大小哥哥
摘要:/*字符串最小正周期*/#include<stdio.h>#include<string.h>int main(){ char a[100]; int i,j;int len; scanf("%[^\n]%*c",a);/*gets亦可*/ len=strlen(a); for(i=1;i<=len;i++)/*枚举,周期为1即是常量串,为n实际就是没周期,不过,没加以修改*/ if(0==len%i) { for(j=i;j<len;j++) if(a[j]!=a[j%i]) break; if(len==j) { printf(&qu 阅读全文
posted @ 2012-05-21 11:09 加拿大小哥哥
摘要:7.#include<stdio.h>void fun(int *a){*a+=2;}int main(){//int i;printf("%d\n",fun((int[]){5});//为啥不对,fun(&5)肯定不对,再设变量我知道对return 0;}说一下你的代码,就这么一点代码就有2个错误,这样的代码能编译通过吗?1:printf("%d\n",fun((int[]){5}); 少一个括号printf("%d\n",fun((int[]){5}));2: fun返回类型是void,却要printf返回数值 阅读全文
posted @ 2012-05-15 23:21 加拿大小哥哥
摘要://n!末尾有几个零#include<stdio.h>int main(){int n,s;int sum=0;printf("Input n:");scanf("%d",&n);while(n){s=n/5;sum+=s;n/=5;}printf("%d\n",sum);return 0;}注释:2是足够的关键看有几个5,以100为例,先除以5,除尽的有5,10,15,20,……100等20个数,得到1,2……20;再除以5,除尽的有5,10,15,20这4个数;于是共24个5,即24个0另解:5**(m+1)& 阅读全文
posted @ 2012-04-21 22:02 加拿大小哥哥
摘要://n!末尾有几个零#include<stdio.h>int main(){int n,s;int sum=0;printf("Input n:");scanf("%d",&n);while(n>0){n=n/5;sum+=n;}printf("%d\n",sum);return 0;}//阶乘位数ans = (int)log10(n!)+1 ;for(i=2;i<=n;i++) sum += log10(i);return (int)sum + 1;注释:2是足够的关键看有几个5,以100为例,先除以 阅读全文
posted @ 2012-03-27 13:34 加拿大小哥哥