《考研机试》(四)机试题精讲

1.题(一)

《考研机试》(四)机试题精讲_第1张图片

 

解析:

  只需要知道一个三位数k:个位 = k%10

               十位 = k/10%10

               百位 = k/100 

代码:

#include
using namespace  std;

int main() {
	for(int i=100; i<1000; i++){
		int gewei = i%10;
		int shiwei = i/10%10;
		int baiwei = i/100;
		int sum = (gewei*gewei*gewei)+(shiwei*shiwei*shiwei)+(baiwei*baiwei*baiwei);
		if( i==sum ){
			cout << i << " ";
		}
	} 
	return 0;
}

2.题(二)

《考研机试》(四)机试题精讲_第2张图片

 

 解析:两种思路:1.i,j两个指针,插入排序,i是j的前面,如果i,j一样,那么j++跳过重复元素

         2.i,j两个指针使用辅助数组,辅助数组b大小=原数组a,刚开始赋值b[0]=a[0],从0开始比较,如果相等原数组指针i++,否则存到辅助数组里去

代码:

#include
using namespace  std;

void deleteSame1(int a[], int n){
	int i, j;//定义2个指针 
	for(i=0, j=1; j 
 

3.题(三)

《考研机试》(四)机试题精讲_第3张图片

 

 《考研机试》(四)机试题精讲_第4张图片

 

 解析:找到叶子节点 = 全部节点 — 非叶子节点

    如果一个结点序号i,只要有结点的parent == i,那么结点i就是非叶子节点

代码:

#include
using namespace std;
#define MAX_TREE_SIZE 100

//结点结构体: 
typedef struct {
	char data; //结点数据域
	int parent; //结点双亲在数组中的位置
} PTNode;

//树结构体: 
typedef struct {
	PTNode nodes[MAX_TREE_SIZE];  //存储树中所有的结点
	int n; //树中的结点数,n 不超过 100
}PTree;

/*
算法思想:
		  遍历结点数组,当该结点的序号有另外一个节点指向时,那么该结点为非叶节点,
		  当遍历完结点时,没有一个结点的指针指向该序号的话,那么该结点即是叶结点。
*/

//返回树中叶子结点个数=节点数目-非叶子节点数目 
int GetLeavesCount(PTree T) {
	int count = 0;//统计非叶结点的个数,转换一下思考方式,否则很难直接统计叶结点个数
	//非叶子节点:只要是有其他结点指向该结点就是非叶子结点 
	for(int i=0; i> n;
	PTree pt;
	pt.n = n;
	cout << "请输入每个结点的信息:" << endl;
	for (int i = 0; i < n; i++) {//输入结点的数据域和结点双亲在数组中的位置
		cin >> pt.nodes[i].data;//数据 
		cin >> pt.nodes[i].parent;//父节点位置 
	}
	int leaves=GetLeavesCount(pt);
	cout << "叶子节点数目=" << leaves << endl;
	return 0;
}

 

你可能感兴趣的:(《考研机试》(四)机试题精讲)