C++ Exercises(十八)

 下了份《46家公司笔试题》做做,好久没接触这些基本知识了,熟悉下

 1.完成下列程序

    *

    *.*.

    *..*..*..

    *...*...*...*...

    *....*....*....*....*....

    *.....*.....*.....*.....*.....*.....

    *......*......*......*......*......*......*......

    *.......*.......*.......*.......*.......*.......*.......*.......

#include <iostream>
using namespace std;
const int ROWS = 8;//行数

void DoPrint()
{
    
int i,j,k;
    
for(i=1;i<=ROWS;++i)
    {
        
for(j=1;j<=i;++j)
        {
            cout
<<"*";
            
for(k=1;k<=i-1;++k)cout<<".";
        }
        cout
<<endl;
    }
}
int main()
{
    DoPrint();
    
return 0;
}

2.完成程序,实现对数组的降序排序

#include <iostream>
using namespace std;

void printArray(int a[],int n)
{
    
for(int i=0;i<n;++i)
        cout
<<a[i]<<"\t";
    cout
<<endl;
}
int partion(int a[],int left,int right)   
{
//分割  
    int temp = a[left];
    
while (left<right)
    {
        
while (left<right && a[right]<=temp)--right;
        a[left] 
= a[right];
        
while (left<right && a[left]>=temp)++left;
        a[right] 
= a[left];
    }
    a[left] 
= temp;
    
return   left;   
}   

void quicksort(int a[],int left,int right)   
{
//快速排序  
    if(left>=right)     
        
return;   
    
int pivotloc;   
    pivotloc 
= partion(a,left,right);   
    quicksort(a,left,pivotloc
-1);   
    quicksort(a,pivotloc
+1,right);   
}   

int main()
{
    
int array[] = {45,56,76,234,1,34,23,2,3};
    
int size = sizeof(array)/sizeof(array[0]);
    quicksort(array,
0,size-1);
    printArray(array,size);
    
return 0;
}

3,费波那其数列,11235……编写程序求第十项。可以用递归,也可以用其他

方法,但要说明你选择的理由。

#include <iostream>
using namespace std;

int Pheponatch(int N)
{
//返回斐波那契数列第N项
    int a[100]={1,1};
    
for (int i=2;i<N;++i)
    {
        a[i] 
= a[i-1]+a[i-2];
    }
    
return a[N-1];
}
int main()

    cout
<<Pheponatch(4)<<endl;
    
return 0;
}

4,错误原因:指针未初始化,

改正后的代码:

#include <stdio.h> 
#include 
<malloc.h> 
#include 
<iostream>
using namespace std;

struct TNode

    TNode
* left; 
    TNode
* right; 
    
int value; 
}; 

TNode
* root=NULL; 

void append(int N) 

    TNode
* NewNode=(TNode *)malloc(sizeof(TNode)); 
    NewNode
->value=N; 
    NewNode
->left = NULL;
    NewNode
->right = NULL;
    
if(root==NULL) 
    {
        root
=NewNode; 
        
return
    } 
    
else 
    { 
        TNode
* temp; 
        temp
=root;
        
while((N>=temp->value && temp->left!=NULL) || (N<temp->value && temp->right!=NULL)) 
        { 
            
while(N>=temp->value && temp->left!=NULL) 
                temp
=temp->left; 
            
while(N<temp->value && temp->right!=NULL) 
                temp
=temp->right; 
        } 
        
if(N>=temp->value) 
            temp
->left=NewNode; 
        
else 
            temp
->right=NewNode; 
        
return
    } 
}

void printTree(TNode* t)
{
    
if (t!=NULL)
    {
        printf(
"%d\n",t->value);
        printTree(t
->left);
        printTree(t
->right);
    }
}
int main() 

    append(
63); 
    append(
45); 
    append(
32); 
    append(
77); 
    append(
96); 
    append(
21); 
    append(
17); // Again,  数字任意给出
    printTree(root);
    
return 0;

5,设计函数 int atoi(char *s)

#include <iostream>
using namespace std;

int my_aoti(char* s)
{
//字符串转化为整数
    int len = strlen(s);
    
int result = 0;
    
for (int i=0;i<len;++i)
    {
        result 
= result*10+s[i]-'0';
    }
    
return result;
}
int main() 

    
char* str = "123";
    
int num = my_aoti(str);
    cout
<<num<<endl;
    
return 0;
}

6,实现双向链表删除一个节点P,在节点P 后插入一个节点,写出这两个函数

//双向链表节点
struct DbLinkNode
{
    
struct DbLinkNode* prev;//前一个节点
    struct DbLinkNode* next;//后一个节点
    int value;
};

bool Delete(DbLinkNode* head,int num)
{
//在双向链表(带头节点)中删除第一个值为num的节点
    if (head->next!=NULL)
    {
//表中有节点存在
        struct DbLinkNode* pre = head,p = head->next;
        
while (p!=NULL&&p->value!=num)
        {
            pre 
= p;
            p 
= p->next;
        }
        
if (p==NULL)
        {
//没找到
            return false;
        }
        
else if (p->next==NULL)
        {
//待删除的是最后一个节点
            pre->next = NULL;
            delete p;
            p 
= NULL;
        }
        
else
        {
//待删除的不是最后一个
            pre->next = p->next;
            p
->next->prev = pre;
            delete p;
            p 
= NULL;
        }    
        
return true;
    }
    
else
    {
        
return false;
    }
    
}

bool Insert(struct DbLinkNode* head,int target,int num)
{
//在节点target后插入节点num
    if (head->next!=NULL)
    {
//表中有节点存在
        struct DbLinkNode* p = head->next;//指向第一个节点
        struct DbLinkNode* newNode = (struct DbLinkNode*)malloc(sizeof(DbLinkNode));
        newNode
->value = num;
        newNode
->next = NULL;
        newNode
->prev = NULL;
        
while (p!=NULL && p->value!=num)
        {
            p 
= p->next;
        }
        
if (p==NULL)
        {
            free(newNode);
            newNode 
= NULL;
            
return false;
        } 
        
else if (p->next==NULL)
        {
//目标节点是最后一个节点,新节点插入为尾节点
            p->next = newNode;
            newNode
->prev = p;
        }
        
else
        {
//目标节点不是最后一个
            newNode->next = p->next;
            p
->next->prev = newNode;
            p
->next = newNode;
            newNode
->prev = p;
        }
        
return true;
    }
    
else
    {
        
return false;
    }
}

 

posted on 2009-02-18 20:21  Phinecos(洞庭散人)  阅读(908)  评论(0编辑  收藏  举报

导航