博文

组合--非递归实现(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> #def......

阅读全文(2682) | 评论: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;
}......

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

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

摘要:一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:
1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。
2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。
3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放空间。
4、文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放空间。
5、程序代码区:存放函数体的二进制代码。 下面的例子可以完全展示不同的变量所占的内存区域: //main.cpp
int 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): 申请和释放由程序员控制,并指明大小。容易产生memo......

阅读全文(2463) | 评论: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]
             &......

阅读全文(2523) | 评论: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;
}......

阅读全文(2572) | 评论: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';
}......

阅读全文(2512) | 评论: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'); 
} ......

阅读全文(2539) | 评论: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);
}......

阅读全文(2052) | 评论: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;
}......

阅读全文(4666) | 评论: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票原则:优先售一个间隔内的票; 如果剩余票数不足,就提示不足, 不售票. 如果不能满足优先原则,......

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