下了份《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;
- }
- #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;
- }
- }