04 2011 档案
摘要:一.C语言中的static关键字 在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。 (1)修饰局部变量 一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束。但是在这里要注意的是,虽然用static对局部变量进行修饰过后,其生命周期以及存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。 在用static修饰局部变量后,该变量只在初次运行时进行初始化工作,且只进行一
阅读全文
摘要:一.副作用(side effect) 表达式有两种功能:每个表达式都产生一个值( value ),同时可能包含副作用( side effect )。副作用是指改变了某些变量的值。 如: 1:20 //这个表达式的值是20;它没有副作用,因为它没有改变任何变量的值。 2:x=5 // 这个表达式的值是...
阅读全文
摘要:一.运算符的优先级 在C++ Primer一书中,对于运算符的优先级是这样描述的: Precedence specifies how the operands are grouped. It says nothing about the order in which the operands are evaluated. 意识是说优先级规定操作数的结合方式,但并未说明操作数的计算顺序。举个例子: 6+3*4+2 如果直接按照从左到右的计算次序得到的结果是:38,但是在C/C++中它的值为20。 因为乘法运算符的优先级高于加法的优先级,因此3是和4分组到一起的,并不是6与3进行分组。这就是运算符
阅读全文
摘要:一.C语言中的const const是C语言中保留的一个关键字,它用来限定一个变量是只读的,即不可变的。程序中使用const可以在一定程度上提高程序的健壮性,但是程序中使用过多的const,可能在对代码的阅读时增加一定的难度。 (1)用const修饰一般变量 注意在C语言中,用const修饰的变量必须在声明时进行初始化(用来修饰函数的形参除外); 如: const int n; 这种声明方式是错误的 const int n=5; 正确 void fun(const int n); 正确 const char a; 错误 char * const p; 错误 const char *p;正确(.
阅读全文
摘要:素数的求法1.素数的定义 只能被1和它自己整除的自然数称为素数,特别规定1不属于素数。2.求法 (1)根据素数的定义,很明显,如果一个数是素数它的因子只包含1和它本身。 因此可以根据判别某个数的因子的方法来判断其是否是素数。int isprime(int n){ int i; for(...
阅读全文
摘要:BlueEyes' ProblemThe Problem袁源在学英语的时候遇到了一个难题。当他看到一个单词的时候,他不知道这个词他以前是否背过。(这种事也常发生在其他人身上)。为了解决这个问题,他想在读某篇文章之前,先统计这篇文章中每个单词出现的次数。如果是你,你会怎么实现'统计'这个过程呢? 输入本题只有一组数据.输入为一篇不换行的英语文章(包括各种常用符号,长度小于10000个字母).'单词'在这里定义为只包含52个大小写字母的连续字符串(大写和小写是不同的字母,每个单词的长度不超过100,整个文章总共的单词数不超过1000个,如I'll是两
阅读全文
摘要:更新Android SDK到3.0版本时,遇到Failed to rename directory E:\android\tools to E:\android\temp\ToolPackage.old01问题,导致无法更新,出现该问题的原因是由于3.0版本与较早的sdk版本之间文件结构有冲突,解决方法如下:1)将temp文件夹下的ToolPackage.new01改名为tools;2)将(1)中得到的tools文件夹拷到SDK的根目录下,覆盖原来的tools文件夹;3)重启SDK Manager.exe,再进行更新即可.
阅读全文
摘要:拓扑排序 一.定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称为满足拓扑次序(Topological Orde
阅读全文
摘要:1075: BlueEyes and Apples (II)The Problem袁源除了喜欢吃苹果外,他在有空的时候还喜欢把苹果按重量由大到小排成一列.当然,这是为了方便以后从最大的开始吃,这样他就能永远都吃到最大的!但是他只有一部没有砝码的天平,于是他每次只能比较两个苹果的重量。现在就要请你帮忙,如果每次只给出两个苹果的重量关系,怎样才能把这些苹果都排列好呢?输入本题包括多组测试数据.每组测试数据的第一行为一个整数n(1<=n<=20),代表一共的比较次数,接下来的n行,每行包括两个大写字母x和y,代表x的重量大于y.当n=0时代表输入结束,这组数据不包括在需要计算的数据中.
阅读全文
摘要:Humble NumbersA number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, ... shows the first 20 humble numbers.Write a program to find and print the nth element in this sequence.Input SpecificationT.
阅读全文
摘要:Windows 下搭建Android开发环境一.下载并安装JDK版本要求JDK1.6+,下载JDK成功后进行安装,安装好后进行环境变量的配置【我的电脑】-——>【属性】——>【高级】 ——>【环境变量】——>【系统变量】中点击【新建】:变量名:CLASSPATH变量值:…… \ jdk1.6.0_14 \ lib \ dt.jar;……\ jdk1.6.0_14 \ lib \ tools.jar选中“变量名PATH”,点击【编辑】:变量值: ;……\ jdk1.6.0_14 \ bin;(增加)注:“……”表示jdk1.6.0_14的安装路径;红字部分都是...
阅读全文
摘要:IP判断基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。合法的IP是这样的形式:A.B.C.D其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存在,如001这种情况。现在,请你来完成这个判断程序吧^_^Input输入由多行组成,每行是一个字符串,输入由“End of file”结束。字符串长度最大为30,且不含空格和不可见字符。Output对于每一个输入,单独输出一行如果该字符串是合法的IP,输出YES,否则,输出NOSample Input202.115.32.24a.b.c.dSample OutputYESNO题.
阅读全文
摘要:(1)n!末尾有多少个0 第一种思路: n!=n*(n-1)*(n-2)*....3*2*1,而如果要出现0,必须得有2和5出现,但是明显n!中5的因子个数少于2的因子个数,即转化为求 n!中因子5的个数 int count(int n) { int sum=0; while(n) { sum+=n/5; n/=5; } return sum; } 第二种思路:计算n!,每次末尾出现0,则将0消去,计数器并自增1 int count=0; int ans=1; for(i=n;i>=2;i--){ans*=i;while(ans%10==0)//消除末尾的0{ans/=10; count
阅读全文
摘要:阶乘N的阶乘定义为:N!=N×(N-1)×……×2×1请编写一个程序,输出N的阶乘的十进制表示中从最末一个非0位开始自低位向高位数的第M位。其中:0<=N<=10000,1<=K<=5例如:N=5,M=2,结果是1(5!=120) N=8,M=3,结果为0(8!=40320)输入:第一行一个整数M (1<=M<=100),代表测试数据的个数;接下来M行,每行两个整数N,K输出: 输出M行,每行一个整数,即测试数据的结果。 样例:输入:25 28 3输出:10题意:很明了,就是求n!十进制表示中的从最末一个非0位开始自低
阅读全文
摘要:C(n,k) Description求组合数 C ( n , k) 的奇偶性Input文件是多case的,每行输入一个 n (1<=n<=10^9)和 k(0<=k<=n) ,当 n 等于 0 且 k 等于 0 时输入结束Output对于每一个case,输出一行,为组合数 C ( n , k) 的奇偶性,奇输出1,偶输出0Sample Input2 02 10 0Sample Output10 题意:求C(n,k)的奇偶性。显然把C(n,k)的值直接求出来进行判断是不可行的。由于C(n,k)=n!/k!*(n-k)!,要判断奇偶性,即比较分子与分母含有因子2的个数,因此
阅读全文
摘要:分解 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,
阅读全文
摘要: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
阅读全文
摘要: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: "
阅读全文
摘要:求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){.
阅读全文
摘要:在处理大数的运算时,一般采用数组去模拟,下面介绍大数的加、减、乘、除四则运算的实现方法。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){ ...
阅读全文
摘要:上一篇讨论的是整数划分问题递归方法,下面来讨论下非递归方法:一般情况下,遇到递归问题,若能直接求得递推式,则可以很容易用数组模拟来实现递归,根据已经得出的递归关系,可以设置一个二维数组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];}}
阅读全文
摘要:整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数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被认为是同一个划分。该问题是
阅读全文
摘要:pala提出的问题:十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法? 这个问题推广一下,就是错排问题: n个有序的元素应有n!种不同的排列。如若一个排列式的所有的元素都不在原来的位置上,则称这个排列为错排。 下面用递推的方法推导错排公式: 当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推. 第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法; 第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-...
阅读全文
摘要: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位机器
阅读全文
摘要:在谈述函数调用和返回值问题之前,先来看看C++中内存分配的问题。 C++编译器将计算机内存分为代码区和数据区,很显然,代码区就是存放程序代码,而数据区则是存放程序编译和执行过程出现的变量和常量。数据区又分为静态数据区、动态数据区,动态数据区包括堆区和栈区。以下是各个区的作用:(1)代码区:存放程序代码;(2)数据区a.静态数据区: 在编译器进行编译的时候就为该变量分配的内存,存放在这个区的数据在程序全部执行结束后系统自动释放,生命周期贯穿于整个程序执行过程。b.动态数据区:包括堆区和栈区 堆区:这部分存储空间完全由程序员自己负责管理,它的分配和释放都由程序员自己负责。这个区是唯一一个可以由程.
阅读全文
摘要:指针和引用在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
阅读全文
摘要:在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有很大的区别的。1.两者在含义上的区别。 数组对应着一块内存区域,而指针是指向一块内存区域。其地址和容量在生命期里不会改变,只有数组的内容可以改变;而指针却不同,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。如:#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void){ char*s1="
阅读全文
摘要:大家都知道指针是C语言中的精粹,学好了指针基本就等于学号了C语言,它能直接对物理地址进行访问,具有双重功能,是嵌入式设计中必不可少的一门语言。C语言功能强大的主要原因就是具有指针结构。指针是一种特殊的数据类型,直接指向目标的存储地址,实现直接访问对象存储空间的功能。 下面谈谈几个指针中常见的问题:1.声明指针和取指针变量所指向内存空间的数据时所用到的 * 符号的意义如:int a;int *p=&a;*p=3;在int *p=&a中 * 仅仅为了说明p是一个指向整形数据的变量,而在*p=3中 * 表示取p所指向内存单元的数据,即*p与a等价;初学者容易犯下面这个错误:比如写一个
阅读全文
摘要: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
阅读全文