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,费波那其数列,1,1,2,3,5……编写程序求第十项。可以用递归,也可以用其他

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

复制代码
#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;
    }
}
复制代码


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2009/02/18/1393441.html,如需转载请自行联系原作者
目录
相关文章