第一次上这个论坛发一下试试

金宝搏平台,前些天才做的题目,呵呵是简单的程序

“head.h”

第一次上这个论坛发一下试试。 

 

有一对小老鼠,出生一周后长成一对大老鼠,两周后出生第一对小老鼠,三周后,上周出生的小老鼠变成了大老鼠,而原来的大老鼠又生出了一对小老鼠之后便死亡了,四周后,第一对出生的小老鼠(此时已经是大老鼠)又生出了一对小老鼠,此时共有三对老鼠。试编制程序,计算N周后有多少对老鼠?

 

基本要求:

view plaincopy to clipboardprint?#include<iostream>  
#第一次上这个论坛发一下试试。include<string>  
using namespace std; 
 
class STRING 

public: 
    void GetString(); 
    void GetSubString(); 
    void KMP(); 
    void Print(); 
private: 
    void GetNext(); 
    string str; 
    string sub; 
    int next[1000]; 
    int strlen; 
    int sublen; 
}; 
 
void STRING::GetString() 

    cout<<“Please Input The MainString
:”<<endl<<endl; 
    cin>>str; 
    strlen=str.length(); 

 
void STRING::GetSubString() 

    cout<<“Please Input The SubString
:”<<endl<<endl; 
    cin>>sub; 
    sublen=sub.length(); 

 
void STRING::KMP() 

    cout<<“KMP Method Called !”<<endl<<endl; 
    GetNext(); 
    int i,j; 
    i=j=0; 
    while(i<strlen&&j<sublen) 
    { 
        if(j==-1||str[i]==sub[j]) 
        { 
            i++; 
            j++; 
        } 
        else 
        { 
188金宝搏官网,            j=next[j]; 
        } 
    } 
    if(j==sublen) 
    { 
        cout<<“Succeed ! Position =
“<<i-j+1<<endl<<endl; 
    } 
    else 
    { 
        cout<<“Failed !”<<endl<<endl; 
    } 

 
void STRING::Print() 

    cout<<“Main String = “<<str<<endl<<”   
Length = “<<strlen<<endl; 
    cout<<“SubString = “<<sub<<endl<<”    Length
= “<<sublen<<endl<<endl; 

 
void STRING::GetNext() 

    int i,j; 
    next[0]=-1; 
    i=0;j=-1; 
    while(i<sublen-1) 
    { 
        if(j==-1||sub[i]==sub[j]) 
        { 
            i++; 
            j++; 
            if(sub[i]!=sub[j]) 
                next[i]=j; 
            else 
                next[i]=next[j]; 
        } 
        else 
        { 
            j=next[j]; 
 
        } 
    } 

#include<iostream>
#include<string>
using namespace std;

(1)编程实现,要求N的取值可以随意变换;

class STRING
{
public:
 void GetString();
 void GetSubString();
 void KMP();
 void Print();
private:
 void GetNext();
 string str;
 string sub;
 int next[1000];
 int strlen;
 int sublen;
};

(2)实物演示时要求讲出程序原理;

void STRING::GetString()
{
 cout<<“Please Input The MainString :”<<endl<<endl;
 cin>>str;
 strlen=str.length();
}

提高要求:

void STRING::GetSubString()
{
 cout<<“Please Input The SubString :”<<endl<<endl;
 cin>>sub;
 sublen=sub.length();
}

(1)能够采用一些形式动态描述老鼠出生和长大这一过程;

void STRING::KMP()
{
 cout<<“KMP Method Called !”<<endl<<endl;
 GetNext();
 int i,j;
 i=j=0;
 while(i<strlen&&j<sublen)
 {
  if(j==-1||str[i]==sub[j])
  {
   i++;
   j++;
  }
  else
  {
   j=next[j];
  }
 }
 if(j==sublen)
 {
  cout<<“Succeed ! Position =
“<<i-j+1<<endl<<endl;
 }
 else
 {
  cout<<“Failed !”<<endl<<endl;
 }
}

(2)考虑采用性能好的算法。

void STRING::Print()
{
 cout<<“Main String = “<<str<<endl<<”    Length
= “<<strlen<<endl;
 cout<<“SubString = “<<sub<<endl<<”    Length =
“<<sublen<<endl<<endl;
}

 

void STRING::GetNext()
{
 int i,j;
 next[0]=-1;
 i=0;j=-1;
 while(i<sublen-1)
 {
  if(j==-1||sub[i]==sub[j])
  {
   i++;
   j++;
   if(sub[i]!=sub[j])
    next[i]=j;
   else
    next[i]=next[j];
  }
  else
  {
   j=next[j];

 

  }
 }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注