博文

组合--非递归实现(2008-04-01 23:31:00)

摘要:组合算法 (来源与互联网)    本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,为0则没选中。  首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。     然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合,同时将其左边的所有“1”全部移动到数组的最左端。       当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得到了最后一个组合。  例如求5中选3的组合:       1   1   1   0   0   //1,2,3  1   1   0   1   0   //1,2,4  1   0   1   1   0   //1,3,4  0   1   1   1   0   //2,3,4  1   1   0   0   1   //1,2,5  1   0   1   0   1   //1,3,5  0   1   1   0   1   //2,3,5  1   0   0   1   1   //1,4,5  0   1   0   1   1   //2,4,5  0   0   1   1   1   //3,4,5 以下是实现: #include<stdio.h> #define MAXNUM 50 void init(int* pac, int n, int m);void conver......

阅读全文(2764) | 评论:0

统计单词数小程序--C(2008-04-01 21:54:00)

摘要:#include<stdio.h>int main(){    char ch;    int word = 0;    int count = 0;     while((ch=getchar())!='\n'){        if(ch == ' ')            word = 0;        else if(0 == word){            count++;            word = 1;        }    }        printf("the numbers of words is: %d", count);    return 0;}......

阅读全文(3380) | 评论:0

c/c++内存划分(2008-04-01 21:20:00)

摘要:一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放空间。 4、文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放空间。5、程序代码区:存放函数体的二进制代码。 下面的例子可以完全展示不同的变量所占的内存区域: //main.cppint a = 0; 全局初始化区char *p1; 全局未初始化区main(){   int b; //栈中char s[] = "abc"; //栈中char *p2; //栈中char *p3 = "123456"; //123456\0在常量区,p3在栈上static int c =0; //全局(静态)初始化区//以下分配得到的10和20字节的区域就在堆区p1 = (char *)malloc(10);   p2 = new char[20];//(char *)malloc(20);strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。} 二、栈(stack)和堆(heap)具体的区别。1、在申请方式上栈(stack): 现在很多人都称之为堆栈,这个时候实际上还是指的栈。它由编译器自动管理,无需我们手工控制。 例如,声明函数中的一个局部变量 int b 系统自动在栈中为b开辟空间;在调用一个函数时,系统自动的给函数的形参变量在栈中开辟空间。堆(heap): 申请和释放由程序员控制,并指明大小。容易产生memory leak。在C中使用malloc函数。如:p1 = (char *)malloc(10);在C++中用new运算符。如:p2 = new char[20];//(char *)m......

阅读全文(2521) | 评论:1

不调用库函数,实现strcpy函数(2008-01-23 13:44:00)

摘要:题目:     已知strcpy函数的原型是:         char * strcpy(char * strDest,const char * strSrc);     1.不调用库函数,实现strcpy函数。     2.解释为什么要返回char *。     解说:     1.strcpy的实现代码         char * strcpy(char * strDest,const char * strSrc)         {                 if ((strDest==NULL)||(strsrc="/=NULL")) //[1]                         throw "Invalid argument(s)"; //[2]                 char * strDestCopy=strDes......

阅读全文(2611) | 评论:0

删除字符串中相同的字符并排序--c(2007-12-06 21:15:00)

摘要:#include "stdio.h"#include "string.h" int main(){ char str[30] = "acegfddcbag"; char *p, *q, *r, c; for(p=str; *p; p++){  for(q=r=p; *q; q++)   if(*r > *q) r = q;  if(r != q){   c = *r; *r = *p; *p = c;  } } for (p=str; *p; p++){  for(q=p; *p==*q; q++)   ;  strcpy(p+1, q); } printf("%s", str);  return 0;}......

阅读全文(2624) | 评论:0

数字翻转成字符--c递归(2007-12-06 21:02:00)

摘要:#include "stdio.h"void convert(char*, int); int main(){ int number;  char str[10] = ""; scanf("%d", &number); convert(str, number); puts(str);  return 0;} void convert(char*s, int n){ int i; if((i=n/10) !=0 ) convert(s+1, i); *s = n%10 + '0';}......

阅读全文(2587) | 评论:0

数字转换成字符--c递归(2007-12-06 20:55:00)

摘要:#include "stdio.h"void convert(int); int main(){ int number;  scanf("%d", &number); if(number < 0){  putchar('-');  number = -number; } convert(number);  return 0;} void convert(int n){ int i; if((i=n/10) !=0 ) convert(i); putchar(n%10 + '0'); } ......

阅读全文(2673) | 评论:0

字符串翻转--c递归(2007-12-06 20:51:00)

摘要:#include "stdio.h"void intverp(char*); int main(){ char s[10] = "hello!"; intverp(s); return 0;} void intverp(char* s){ if(!*s) return; intverp(s+1); printf("%c", *s);}......

阅读全文(2106) | 评论:0

字符串中包含子串的个数--c(2007-12-06 20:47:00)

摘要:#include "stdio.h"int count(char*, char*); int main(){ char str[80], subStr[80];  gets(str); gets(subStr); printf("%d\n", count(str, subStr));  return 0;}int count(char* str, char* subStr){ int i, j, k, num = 0; for(i=0; str[i]!='\0'; i++)  for(j=i, k=0; subStr[k]==str[j]; k++, j++)   if(subStr[k+1] == '\0'){    num++;    break;   } return num;}......

阅读全文(4747) | 评论:0

火车售票 -- C(2007-11-25 18:44:00)

摘要:1.编写程序实现火车站售票程序(以一节车厢为例)。 下图(图1)是火车车厢内座位的布局,座位号从1到80; 其中1,2, 5,6位于一个间隔内,3、4、7、8也是一个间隔内的座位… 1 5 9 13 ……… ……… 65 69 73 77 2 6 10 14 66 70 74 78 过道 3 7 11 15 ……… ……… 67 71 75 79 4 8 12 16 68 72 76 80        售票规则总则 假设每次最多售4张;                        售1张票原则:随便售出一张没有售出的票; 售2张票原则:优先售2张相邻的票、如果没有2张相邻的票就随便售出两张票;                         所谓2张相邻包括:1和2;  3和4;  5和6;  7和8等等 以下情况不算相邻: 1和5;  2和3等等                             售3张或4票原则:优先售一个间隔内的票; 如果剩余票数不足,就提示不足, 不售票. 如果不能满足优先原则,......

阅读全文(2395) | 评论:0