华科研究生复试机试题代码堆积供以后参考
生活随笔
收集整理的這篇文章主要介紹了
华科研究生复试机试题代码堆积供以后参考
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include "stdafx.h"
#include <cstdio>
#include <cstring>
using namespace std;#define MaxSize 50
char str[MaxSize];int main()
{// 測試// 正常情況:|hello world a. // 邊界情況:|a.// 異常情況(不考慮多個'.'和'.'與最后一個單詞離開)// 擴展性良好的思路:先根據空格‘分割’字符串,然后數每個char[]中的字符數量并打印// 一般思路:邊識別邊統計字符while (fgets(str,MaxSize,stdin)){bool IsInWord = false; //判斷是否在單詞里int count = 0; //統計每個單詞的字符數int length = strlen(str);for (int i = 0;i < length;++i){// 當在單詞中碰到空格、字符或'.'的情況時if (IsInWord){if (' ' == str[i]) // 空格{printf("%d ", count);IsInWord = true;count = 0;}else if ('.' == str[i]) // 結束(但無法確保只有'.'){printf("%d\n", count);}else // 字符{count++;}}else // 不在單詞中{// 遇到字符,即開始一個單詞if (str[i] != ' ') // 遇到字符{count++;IsInWord = true;}}}}return 0;
}
// BST.cpp: 定義控制臺應用程序的入口點。
//#include "stdafx.h"
//#include "stdio.h"struct BST
{BST* leftChild;BST* rightChild;BST* parent;int data;
};// BST插入操作:root為BST的根節點,data要插入的數值,node為新插入的節點并返回
bool insert(BST* root, int data, BST** node){// 0.處理異常情況if (root == NULL){return false;}// 1.循環找到插入位置BST* tmp = root;BST* parent = root;bool isRight = true;while (tmp){parent = tmp; //記錄下父節點// 比較data大小決定往哪走if (data > tmp->data) //往右走{tmp = tmp->rightChild;isRight = true;}else //不然,向左走{tmp = tmp->leftChild;isRight = false;}}// 跳出來,說明到插入位置了,開始插入節點BST* insertNode = new BST;insertNode->data = data;insertNode->rightChild = insertNode->leftChild = NULL;insertNode->parent = parent;if (isRight) //插入右邊parent->rightChild = insertNode;else //插入左邊parent->leftChild = insertNode;*node = insertNode; // 返回該節點return true;
}int main()
{//測試//正常情況//邊界情況:一個節點//異常情況:null指針int NodeNumbers;BST* root=NULL;int data;while (scanf("%d", &NodeNumbers)){// 輸入數字for (int i = 0;i < NodeNumbers;++i){scanf("%d", &data);// 處理第一個節點if (i == 0){root = new BST;root->data = data;root->leftChild = root->rightChild = root->parent= NULL;printf("%d\n", -1);}else{BST* node=NULL;if (insert(root, data, &node)){//插入成功后,打印父親節點的數值printf("%d\n", node->parent->data);}}}// 存在內存泄漏,沒有delete掉那些new 出來的內存,考試中為了速度不用考慮}return 0;
}
// InversionOfMatrix.cpp: 定義控制臺應用程序的入口點。
//#include "stdafx.h"
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;#define MaxSize 50bool inverse(int matrix[][MaxSize], int dimension)
{// 0.異常情況處理if (matrix == NULL || dimension <= 0)return false;// 1.核心部分for(int i=1;i<dimension;++i)for (int j = 0;j < i;++j){swap(matrix[i][j], matrix[j][i]);}return true;
}int matrix[MaxSize][MaxSize];int main()
{// 測試// 正常情況// 異常情況// 邊界情況:1*1int dimension;while (scanf("%d", &dimension)){for (int i = 0;i < dimension;++i)for (int j = 0;j < dimension;++j)scanf("%d", &matrix[i][j]);// 轉置if (inverse(matrix, dimension)){// 打印結果for (int i = 0;i<dimension;++i)for (int j = 0;j < dimension;++j){if (j == dimension - 1)printf("%d\n", matrix[i][j]);elseprintf("%d ", matrix[i][j]);}}}return 0;
}
#include "stdafx.h"
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;#define MaxSize 50
char result[MaxSize][MaxSize];
char str[MaxSize];
// 一個簡單的splitString函數,依據char分割由char緊密連接的string。
// 如:255.255.255.255中的'.' 或者 hello world you 中的空格。
bool splitString(char str[], int length, char Reg, char result[][MaxSize])
{// 0.異常情況處理if (str == NULL || result == NULL||length<=0)return false;// 1.核心部分char* source = str;int count = 0,num=0; // count計數,num表示在result中存放字符串的順序for (int i = 0;i < length;++i){// 根據當前是不是分隔符來劃分字符串if (str[i] == Reg||i==length-1){// 把前面的字符串復制到result中memcpy(result[num], source, count);result[num][count+1] = '\0';// count重新計數,num\source移位source += count+1;count = 0;num++;}else{// count計數count++;}}return true;
}bool IsRight(char str[], int length)
{// 0.異常情況處理if (str == NULL || length <= 0)return false;// 將字符串轉換成數值,進行比較 int data = atoi(str);if (data >= 0 && data <= 255)return true;elsereturn false;
}int main()
{// 測試// 正常情況 256.2.1.1// 邊界情況 // 異常情況while (fgets(str, MaxSize, stdin)){int length = strlen(str);bool isRight = true;if (splitString(str, length, '.', result)){for (int i = 0;i < 4;i++){length = strlen(result[i]);if (!IsRight(result[i], length)){isRight = false;break;}}}if(isRight)printf("%s\n", "Yes!");elseprintf("%s\n", "No!");}return 0;
}
在這里插入代碼片
// sort.cpp: 定義控制臺應用程序的入口點。
//#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
// 快速排序
// 一次分配過程
void Swap(int* a, int *b)
{int c;c = *b;*b = *a;*a = c;
}int Partition(int* data, int start, int end)
{// 0.處理異常情況/*if (data == NULL || start > end)return ;*/// 1.核心部分/and(time(NULL)); //種子//int index = rand() % (end - start) + start;//Swap(&data[index], &data[start]);int i = start, j = end, tmp = data[start];while (i < j){while (i < j&&tmp < data[j]) j--;if (i < j){data[i]=data[j];i++;}while (i<j&&tmp>data[i]) i++;if (i < j){data[j] = data[i];j--;}}data[i] = tmp;return i;
}void qsort(int* data, int start, int end)
{// 0.處理異常情況if (data == NULL || start > end)return;// 1.核心部分int index = Partition(data, start, end);if (index > start)qsort(data, start, index-1);if (index < end)qsort(data, index+1, end);
}// 歸并排序
int data[100];
int main()
{// 測試// 正常情況// 邊界情況// 異常情況int n;while (scanf("%d", &n)){for (int i = 0;i < n;i++)scanf("%d", &data[i]);qsort(data, 0, n - 1);for (int i = 0;i < n;i++){if (i == n - 1)printf("%d\n", data[i]);elseprintf("%d ", data[i]);}}return 0;
}
在這里插入代碼片
初學者 2020/5/12 9:08:01
// sort.cpp: 定義控制臺應用程序的入口點。
//#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
// 快速排序
// 一次分配過程
void Swap(int* a, int *b)
{int c;c = *b;*b = *a;*a = c;
}int Partition(int* data, int start, int end)
{// 0.處理異常情況/*if (data == NULL || start > end)return ;*/// 1.核心部分/and(time(NULL)); //種子//int index = rand() % (end - start) + start;//Swap(&data[index], &data[start]);int i = start, j = end, tmp = data[start];while (i < j){while (i < j&&tmp < data[j]) j--;if (i < j){data[i]=data[j];i++;}while (i<j&&tmp>data[i]) i++;if (i < j){data[j] = data[i];j--;}}data[i] = tmp;return i;
}void qsort(int* data, int start, int end)
{// 0.處理異常情況if (data == NULL || start > end)return;// 1.核心部分int index = Partition(data, start, end);if (index > start)qsort(data, start, index-1);if (index < end)qsort(data, index+1, end);
}// 歸并排序
int data[100];
int main()
{// 測試// 正常情況// 邊界情況// 異常情況int n;while (scanf("%d", &n)){for (int i = 0;i < n;i++)scanf("%d", &data[i]);qsort(data, 0, n - 1);for (int i = 0;i < n;i++){if (i == n - 1)printf("%d\n", data[i]);elseprintf("%d ", data[i]);}}return 0;
}初學者 2020/5/12 9:08:39
// SpecialSort.cpp: 定義控制臺應用程序的入口點。
//#include "stdafx.h"void Swap(int* a, int* b)
{int c;c = *b;*b = *a;*a = c;
}// 堆排序
void adjustHeap(int *data, int node, int length) //調整堆
{int lchild = 2 * node + 1; //i的左孩子節點序號 int rchild = 2 * node + 2; //i的右孩子節點序號 int parent = node;while (lchild <= length-1) //左孩子在堆里{if (rchild <= length-1) //若右孩子也在堆里{if (data[rchild] > data[lchild]) //左孩子比右孩子小{// 右孩子與父親節點比較if (data[parent] < data[rchild]){Swap(&data[parent], &data[rchild]);parent = rchild;lchild = parent * 2 + 1;rchild = parent * 2 + 2;continue;}elsebreak;}}if (data[lchild] > data[parent]) //左孩子大于父親節點{Swap(&data[lchild], &data[parent]);parent = lchild;lchild = parent * 2 + 1;rchild = parent * 2 + 2;}elsebreak;}
}void buildHeap(int *data, int length) //建堆
{for (int i = length / 2 - 1;i >= 0;i--) //非葉節點最大序號值為length/2 - 1 {adjustHeap(data, i, length);}
}void HeapSort(int *data, int length) //堆排序
{// 0.異常情況if (data == NULL || length <= 0)return;int i;// 建堆buildHeap(data, length);// 調整堆頂元素,并進行堆調整for (i = length-1;i >= 1;i--){Swap(&data[0], &data[i]); //交換堆頂和最后一個元素,即每次將剩余元素中的最大者放到最后面 adjustHeap(data, 0, i); //重新調整堆頂節點成為大頂堆}
}int data[1000];int main()
{// 測試// 正常情況// 邊界情況// 異常情況int n;while (scanf("%d", &n)){for (int i = 0;i < n;i++)scanf("%d", &data[i]);HeapSort(data, n); //堆排序printf("%d\n", data[n - 1]);for (int i = 0;i < n-1;i++){if (i == n - 2){ printf("%d\n", data[i]);break;}printf("%d ", data[i]);}}return 0;
}
總結
以上是生活随笔為你收集整理的华科研究生复试机试题代码堆积供以后参考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: int型数字转char型指针
- 下一篇: 编程训练计划