博文

丢硬币:正面朝上的最大连续序列(2009-08-25 16:10:00)

摘要:    //下面是第一次写的,结果不正确! #include<iostream>#include<ctime>using namespace std; int main(){ //create sequence: static int m=1; int digits[1000],max[500],i,maximum; srand(time(0)); for(i=0;i<1000;i++)  digits[i]=rand()%2; for(i=0;i<1000;i++)  cout<<digits[i]; cout<<endl<<endl; // deal with sequence:  max[1]=1; for(i=0;i<1000;) {  if(digits[i]=1)  {   max[m]++;   i++;  }  else  {   m++;   i++;  } } cout<<"m: "<<m<<endl; for(i=0;i<m;i++) {  maximum=(max[i+1]>max[i]? max[i+1]:max[i]); } cout<<maximum<<endl;  return 0;}......

阅读全文(1326) | 评论:7

replace文件中字符串【修改1】(2009-08-25 11:59:00)

摘要://Reverse_string.h   #ifndef REVERSE_STRING_H#define REVERSE_STRING_H #include<string> // #include<cstring>  will cause error! string   Reverse(string   str)   {     string   S;     int   n=str.size();     while(n>0)     {       n--;       S+=str[n];     }     return   S;   } string Convert(string str){  int n=str.size();  while(n>0)     {       n--;    if(str[n]>=65&&str[n]<=90) str[n]+=32;  //convert capital letter into small letter,in order to ignore the form     //str[n]=(str[n]>90? str[n]+32:str[n]);  }  return str;} string Ignore(string str){ int n=str.size(); string s; for(int i=0;i<n;i++) { &nbs......

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

replace文件中字符串(2009-08-25 10:10:00)

摘要:#ifndef REVERSE_STRING_H#define REVERSE_STRING_H #include<string> // #include<cstring>  will cause error! string   Reverse(string   str)   {     string   S;     int   n=str.size();     while(n>0)     {       n--;       S+=str[n];     }     return   S;   } string Convert(string str){  int n=str.size();  while(n>0)     {       n--;    if(str[n]>=65&&str[n]<=90) str[n]+=32;  //convert capital letter into small letter,in order to ignore the form     //str[n]=(str[n]>90? str[n]+32:str[n]);  }  return str;} string Ignore(string str){ int n=str.size(); string s; for(int i=0;i<n;i++) {  if((str[n]>=65&&......

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

C++中对浮点数的格式化显示(2009-08-22 15:39:00)

摘要: 在许多应用程序领域中,都需要控制小数点后的小数位,但是浮点数对此不能提供直接的支持。怎样对程序中的浮点数据进行"整齐"地格式化呢?在此我们有一个迂回的方法,先把它们转换为字符串,格式化后以文本形式显示出来。   在日常编程中——包括对话框、关系数据库、金融程序、SMS程序及一切处理数据文件的程序,需要控制小数点后的小数位的情况非常普遍,本文中将要讲解如何用简单的方法来控制小数位,另外,还要揭开字符串及数据精度的一点点小秘密。   问题的引出   如有一个函数,其可接受一个long double参数,并将参数转换为字符串,结果字符串应保留两位小数,例如,浮点值123.45678应该生成"123.45"这样的字符串。表面上看来这是一个意义不大的编程问题,然而,如果真要在实际中派上用场,函数应设计为具有一定弹性,以允许调用者指定小数位数。另外,函数也应该能够处理各种异常情况,如像123.0或123这样的整数。   在开始之前,先看一下编写"优雅"C++代码时的两句"真言":   "真言"1:无论何时需要格式化一个数值,都应先转换为一个字符串。这样可保证每位数刚好占据一个字符。   "真言"2:在需要转换为字符串时,请使用<sstream>库。   转换函数的接口非常简洁:第一个参数是需被格式化的数值;第二个参数代表小数点后显示的小数位,且应该具有一个默认值;返回值为一个string类型:  string do_fraction(long double value, int decplaces=3);   注意,第二个参数代表的小数位数中包括了小数点,因此,两位小数需要默认值为3.   精度问题   当然,第一步是把long double值转换为一个string,使用标准C++库<sstream>简直是手到擒来。然而,有一件事情必须引起注意,因为某些原因,stringstream对象默认精度为6,而许多程序员错误地把"精度"理解为小数的位数,这是不正确的,精度应指代全部位数。因而,数字1234.56可安全地通过默认精度6来表示,但12345.67会被截断为12345.6.这样的话,如果你有一个非常大的数,如1234567.8,它的结果会静悄悄地转换为科学记数法:1.23457e+06,这显然不是我们想要的。为避免这样......

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

字符串替换--Debug Error???(2009-08-21 21:46:00)

摘要:#include<iostream>#include<fstream>#include<cstdlib>#include<string>using namespace std; string replace_all(ifstream infile,string from,string to){ string str; infile>>str; cout<<"The basic string: "<<str<<endl; //replace: for(string::size_type pos(0);pos!=string::npos;pos+=to.length()) {  if((pos=str.find(from,pos))!=string::npos)   str.replace(pos,from.length(),to);  else   break; }  return str;} int main(){ string s,f,t; ofstream outfile("IOreplace.dat",ios::out); if(!outfile) {  cerr<<"open error!"<<endl;  exit(1); } cin>>s; outfile<<s; outfile.close();  //infile and replace  ifstream infile("IOreplace.dat",ios::in); if(!infile) {  cerr<<"open error!"<<endl;  exit(1); } cin>>f>>t; c......

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

逆转和忽略大小写并且忽略标点(2009-08-21 20:49:00)

摘要://Reverse_string.h#ifndef REVERSE_STRING_H#define REVERSE_STRING_H #include<string> // #include<cstring>  will cause error! string   Reverse(string   str)   {     string   S;     int   n=str.size();     while(n>0)     {       n--;       S+=str[n];     }     return   S;   } string Convert(string str){  int n=str.size();  while(n>0)     {       n--;    if(str[n]>=65&&str[n]<=90) str[n]+=32;  //convert capital letter into small letter,in order to ignore the form     //str[n]=(str[n]>90? str[n]+32:str[n]);  }  return str;} string Ignore(string str){ int n=str.size(); string s; for(int i=0;i<n;i++) {  if((str[......

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

逆转字符串(2009-08-21 20:49:00)

摘要:#include   <string>     #include   <iostream>     using   namespace   std;     /*       循环实现     string   Reverse(string   str)     {     string   S;     int   n=str.size();     while(n>0)     {     n--;     S+=str[n];     }     return   S;     }*/     string   Reverse(string   str)     {//递归实现     static   string   S;     static   n=str.size();     if(n>0)     {     n--;     S+=str[n];     Reverse(   str);     }     return......

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

ACM--猪的安家(2009-08-03 23:48:00)

摘要:/**********************************************************************************************************************************猪的安家Andy和Mary养了很多猪。他们想要给猪安家。但是Andy没有足够的猪圈,很多猪只能够在一个猪圈安家。举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个猪圈,但是还有2头没有地方去。Andy都快疯了。你对这个事情感兴趣起来,你想通过Andy建造猪圈的过程,知道Andy家至少养了多少头猪。 输入 输入包含多组测试数据。每组数据第一行包含一个整数n (n <= 10) – Andy建立猪圈的次数,解下来n行,每行两个整数ai, bi( bi <= ai <= 1000), 表示Andy建立了ai个猪圈,有bi头猪没有去处。你可以假定(ai, aj) = 1. 输出 输出包含一个正整数,即为Andy家至少养猪的数目。 样例输入 33 15 17 2 样例输出 16***********************************************************************************************************************************/ #include<iostream>#include<cstdlib>using namespace std;void pigNums(int n){ int ai[10],bi[10],i=0; if(n>10||n<1)   abort(); for(i=0;i<n;i++) {  cin>>ai[i]>>bi[i];  if(ai[i]<bi[i]||bi[i]>1000||ai[i]<1)......

阅读全文(1385) | 评论:3

宏定义的技巧总结(2009-08-03 09:24:00)

摘要:1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H   //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 typedef  unsigned char      boolean;     /* Boolean value type. */   typedef  unsigned long int  uint32;      /* Unsigned 32 bit value */ typedef  unsigned short     uint16;      /* Unsigned 16 bit value */ typedef  unsigned char      uint8;       /* Unsigned 8  bit value */   typedef  signed long int    int32;       /* Signed 32 bit value */ typedef  signed short       int16;       /* Signed 16 bit value */ typedef  signed char        int8;        /* ......

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

计算整数n的p次方:一些小算法(2009-08-02 19:59:00)

摘要:法一: int val=1; while(p--)   val *=n; 法二: int power(int n,int p){  return (p==0)?1:n*power(n,p-1); } 法三: #include <iostream>using namespace std; template<int N, int P> struct Power {  enum { val = N * Power<N, P-1>::val };}; template<int N> struct Power<N, 0> {  enum { val = 1 };}; int main() {  cout << Power<2, 5>::val << endl;  // 32}  ......

阅读全文(1471) | 评论:2