上一页 1 ··· 5 6 7 8 9
摘要:分解 n!Description给你一个数 n (1 < n <= 1000000) ,求 n! (n的阶乘)的质因数分解形式,质因数分解形式为n=p1^m1*p2^m2*p3^m3……* 这里 p1 < p2 < p3 < …… 为质数* 如果 mi = 1, 则 ^ mi 就不需要输出 Input输入是多case的,每行一个数n,1 < n <= 1000000,当n等于0时输入结束Output每个n输出一行,为它的质因数分解形式Sample Input670Sample Output6=2^4*3^2*57=2^4*3^2*5*7 题意:给出n, 阅读全文
posted @ 2011-04-12 19:04 Matrix海子 阅读(662) 评论(0) 推荐(0) 编辑
摘要:Time Limit: 3000 MS Memory Limit: 65536 K mathpracDescriptionOne lovely afternoon, Bessie's friend Heidi was helping Bessiereview for her upcoming math exam.Heidi presents two integers A (0 <= A <= 45) and B (1 <= B <= 9)to Bessie who must respond with an integer E in the range 1..62 阅读全文
posted @ 2011-04-11 21:59 Matrix海子 阅读(500) 评论(0) 推荐(0) 编辑
摘要:dance2Time Limit: 3000 MS Memory Limit: 65536 K DescriptionThe cow cotillion, a fancy dance every spring, requires the cows(shown as ">") and bulls (shown as "<") to bow to each other duringa dance. Schematically, one properly bowing pair of cattle is shownlike this: " 阅读全文
posted @ 2011-04-11 21:31 Matrix海子 阅读(445) 评论(0) 推荐(0) 编辑
摘要:求n的阶乘某个因子a的个数,如果n比较小,可以直接算出来,但是如果n很大,此时n!超出了数据的表示范围,这种直接求的方法肯定行不通。其实n!可以表示成统一的方式。n!=(k^m)*(m!)*a 其中k是该因子,m=n/k,a是不含因子k的数的乘积下面推导这个公式n!=n*(n-1)*(n-2)*......3*2*1 =(k*2k*3k.....*mk)*a a是不含因子k的数的乘积,显然m=n/k; =(k^m)*(1*2*3...*m)*a =k^m*m!*a接下来按照相同的方法可以求出m!中含有因子k的个数。因此就可以求除n!中因子k的个数int count(int n,int k){. 阅读全文
posted @ 2011-04-11 21:05 Matrix海子 阅读(1418) 评论(0) 推荐(1) 编辑
摘要:在处理大数的运算时,一般采用数组去模拟,下面介绍大数的加、减、乘、除四则运算的实现方法。1.加法。 如: Input: 123456789123456789123456789 1 Output:123456789123456789123456790 输入采用字符数组保存,然后将输入存在整形数组里,然后逐位相加即可,同时注意进位处理。#include<stdio.h>#include<string.h>int max(int x,int y){ if(x>y) return x; else return y;}int main(void){ ... 阅读全文
posted @ 2011-04-11 20:34 Matrix海子 阅读(4576) 评论(0) 推荐(0) 编辑
摘要:上一篇讨论的是整数划分问题递归方法,下面来讨论下非递归方法:一般情况下,遇到递归问题,若能直接求得递推式,则可以很容易用数组模拟来实现递归,根据已经得出的递归关系,可以设置一个二维数组S[][]来存储数据:for(i=1;i<=n;i++){ S[i][1]=1; S[1][i]=1;}for(i=2;i<=n;i++){for(j=2;j<=m;j++){ i f(i==j)S[i][j]=1+S[i][i-1];else if(i<j)S[i][j]=S[i][i];elseS[i][j]=S[i-j][j]+S[i][j-1];}} 阅读全文
posted @ 2011-04-04 11:34 Matrix海子 阅读(1265) 评论(0) 推荐(0) 编辑
摘要:整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式:n=m1+m2+...+mi; (其中mi为正整数,并且1 <= mi <= n),则{m1,m2,...,mi}为n的一个划分。如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi)<=m,则称它属于n的一个m划分。这里我们记n的m划分的个数为f(n,m);例如但n=4时,他有5个划分,{4},{3,1},{2,2},{2,1,1},{1,1,1,1};注意4=1+3 和 4=3+1被认为是同一个划分。该问题是 阅读全文
posted @ 2011-04-04 10:57 Matrix海子 阅读(22105) 评论(6) 推荐(6) 编辑
摘要:pala提出的问题:十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法? 这个问题推广一下,就是错排问题: n个有序的元素应有n!种不同的排列。如若一个排列式的所有的元素都不在原来的位置上,则称这个排列为错排。 下面用递推的方法推导错排公式: 当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推. 第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法; 第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-... 阅读全文
posted @ 2011-04-04 10:45 Matrix海子 阅读(1853) 评论(0) 推荐(1) 编辑
摘要:C语言:char a = 'a';sizeof(char) = 1sizeof(a) = 1sizeof('a') = 4C++语言:char a = 'a';sizeof(char) = 1sizeof(a) = 1sizeof('a') = 1字符型变量是1字节这个没错,奇怪就奇怪在C语言认为'a'是4字节,而C++语言认为'a'是1字节。原因如下:C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器 阅读全文
posted @ 2011-04-04 10:41 Matrix海子 阅读(2969) 评论(2) 推荐(1) 编辑
摘要:在谈述函数调用和返回值问题之前,先来看看C++中内存分配的问题。 C++编译器将计算机内存分为代码区和数据区,很显然,代码区就是存放程序代码,而数据区则是存放程序编译和执行过程出现的变量和常量。数据区又分为静态数据区、动态数据区,动态数据区包括堆区和栈区。以下是各个区的作用:(1)代码区:存放程序代码;(2)数据区a.静态数据区: 在编译器进行编译的时候就为该变量分配的内存,存放在这个区的数据在程序全部执行结束后系统自动释放,生命周期贯穿于整个程序执行过程。b.动态数据区:包括堆区和栈区 堆区:这部分存储空间完全由程序员自己负责管理,它的分配和释放都由程序员自己负责。这个区是唯一一个可以由程. 阅读全文
posted @ 2011-04-04 10:13 Matrix海子 阅读(11266) 评论(3) 推荐(11) 编辑
摘要:指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。1.指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。(2)可以有co 阅读全文
posted @ 2011-04-03 22:27 Matrix海子 阅读(138106) 评论(10) 推荐(17) 编辑
摘要:在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有很大的区别的。1.两者在含义上的区别。 数组对应着一块内存区域,而指针是指向一块内存区域。其地址和容量在生命期里不会改变,只有数组的内容可以改变;而指针却不同,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。如:#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void){ char*s1=" 阅读全文
posted @ 2011-04-03 21:32 Matrix海子 阅读(14672) 评论(0) 推荐(4) 编辑
摘要:大家都知道指针是C语言中的精粹,学好了指针基本就等于学号了C语言,它能直接对物理地址进行访问,具有双重功能,是嵌入式设计中必不可少的一门语言。C语言功能强大的主要原因就是具有指针结构。指针是一种特殊的数据类型,直接指向目标的存储地址,实现直接访问对象存储空间的功能。 下面谈谈几个指针中常见的问题:1.声明指针和取指针变量所指向内存空间的数据时所用到的 * 符号的意义如:int a;int *p=&a;*p=3;在int *p=&a中 * 仅仅为了说明p是一个指向整形数据的变量,而在*p=3中 * 表示取p所指向内存单元的数据,即*p与a等价;初学者容易犯下面这个错误:比如写一个 阅读全文
posted @ 2011-04-03 20:49 Matrix海子 阅读(12878) 评论(0) 推荐(4) 编辑
摘要:1.I/O函数(1)scanf函数:int scanf(const char *format…..);从标准输入流stdin中按格式format将数据写到参数表中;若操作成功,返回写到参数表中的参数个数,否则返回EOF;注意以下几点:①scanf函数没有精度控制如出现:scanf(“%6.2f”,&a);是绝对错误的②在以%c格式输入字符数据时,所有输入的均为有效字符如:scanf(“%c%c%c”,&a,&b,&c);输入:d e f则a=’d’,b为空格字符' ',c=’d’如果以%s读入字符串,则空格键和回车键都可以作为输入结束的标志如:s 阅读全文
posted @ 2011-04-03 19:36 Matrix海子 阅读(13941) 评论(0) 推荐(1) 编辑
上一页 1 ··· 5 6 7 8 9