题目1:把一串英文句子按单词反序输出。如:"good moring" -> "moring good"。
void Reverse(char *str,int len)
{
char* pBegin=str;
char* pEnd=pBegin+len-1;
while(pBegin<pEnd)
{
swap(*pBegin++,*pEnd--);
}
return;
}
int main()
{
char str[]="Good Morning I have a good day Thank You";
Reverse(str,strlen(str));
cout<<str<<endl;
int len=0;
char* p=str;
while(*p!='\0')
{
len++;
if(*p==' ')
{
Reverse(p-len+1,len-1);
len=0;
}
p++;
}
Reverse(p-len,len);
cout<<str<<endl;
return 0;
}
题目2:输入一个正整数N,输出大于N且最接近这个数的素数。
bool isPrime(int N)
{
for(int i=2;i<=sqrt(double(N));i++)
{
if(N%i==0)
{
return false;
}
}
return true;
}
int GetNum(int N)
{
int i=N;
while(1)
{
if(isPrime(i))
{
return i;
}
i++;
}
}
题目3:用数组实现排序二叉树。
typedef struct BiTNode
{
int m_value;
struct BiTNode* lchild;
struct BiTNode* rchild;
}*BiTree,BiTNode;
#define M 100001
struct BiTNode_G
{
BiTNode_G()
{
m_value=-1;
}
int m_value;
int lchild;
int rchild;
}BiTNodeG[M];
int len=0;//数组长度
int CreateBiTree_G(int num,int index)
{
if(BiTNodeG[index].m_value==-1)//根节点
{
BiTNodeG[index].m_value=num;
BiTNodeG[index].lchild=index*2+1;
BiTNodeG[index++].rchild=index*2+2;
return 0;
}
if(num<BiTNodeG[index].m_value){//建立左子树
CreateBiTree_G(num,index*2+1);
}
else{
CreateBiTree_G(num,index*2+2);
}
}
//排序二叉树
//向二叉树root中插入节点num。
void CreateBiTree(int num,BiTree& root)
{
if(root==NULL)
{
root=(BiTree)malloc(sizeof(BiTNode));
root->lchild=NULL;
root->rchild=NULL;
root->m_value=num;
return;
}
if(num<=root->m_value)
{//插入左子树中
CreateBiTree(num,root->lchild);
}
else
CreateBiTree(num,root->rchild);
}
void InOrderTraverse(BiTree root)
{
if(root)
{
InOrderTraverse(root->lchild);
cout<<root->m_value<<" ";
InOrderTraverse(root->rchild);
}
}
void InOrderTraverseG(int index)
{
if(BiTNodeG[index].m_value!=-1)
{
InOrderTraverseG(index*2+1);
cout<<BiTNodeG[index].m_value<<" ";
InOrderTraverseG(index*2+2);
}
}
int main()
{
BiTree root=NULL;
int a[]={12,2,3,10,8,4,5};
for(int i=0;i<sizeof(a)/sizeof(int);i++)
{
CreateBiTree_G(a[i],0);
}
InOrderTraverseG(0);
}