数据结构测试模拟题(2)

1、选择排序(输出过程)

复制代码
#include <iostream>
using namespace std;

int main() {
    int a[11]; // 用a[1]到a[10]来存储输入

    // 读取10个整数
    for(int i = 1; i <= 10; i++) {
        cin >> a[i];
    }

    // 选择排序过程(只需9轮)
    for(int i = 1; i < 10; i++) {
        int min_idx = i;
        // 找出从i到10的最小值的索引
        for(int j = i + 1; j <= 10; j++) {
            if(a[j] < a[min_idx]) {
                min_idx = j;
            }
        }
        // 若最小值不在当前位置i,就进行交换
        if(min_idx != i) {
            swap(a[i], a[min_idx]);
        }
        // 输出当前轮次的排序结果
        cout << "第" << i << "轮比较的结果为";
        for(int j = 1; j <= 10; j++) {
            cout << " " << a[j];
        }
        cout << endl;
    }

    return 0;
}    

2、寻找大富翁

复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, m;
	cin >> n >> m;
	vector<int> a(n);
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}
	
	// 降序排序
	sort(a.begin(), a.end(), greater<int>());
	
	// 输出前M个
	for (int i = 0; i < m && i < n; i++) {
		if (i > 0) cout << " ";
		cout << a[i];
	}
	return 0;
}

3、冒泡排序(输出过程)

复制代码
#include<bits/stdc++.h>
using namespace std;
int a[15];
void maopaopaixu(){
	int n=10;
	for(int i=0;i<n-1;i++){
		bool t=false;
		for(int j=0;j<n-i-1;j++){
			if(a[j]>a[j+1]){
				int temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
				t=true;
			}
		}
		
		cout<<"第"<<i+1<<"轮比较的结果为 ";
		for(int k=0;k<n;k++){
			cout<<a[k]<<" ";
		}
		cout<<endl;
	}
}
int main(){
	for(int i=0;i<10;i++){
		cin>>a[i];
	}
	maopaopaixu();
	return 0;
}

4、求二叉树的叶子结点个数

复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
char a[N];
int cnt=0;
string str;
void dfs(int r){
	if(a[2*r]!=-1)dfs(2*r);
	cout<<a[r];
	if(a[2*r]==-1&&a[2*r+1]==-1){
		cnt++;
	}
	if(a[2*r+1]!=-1){
		dfs(2*r+1);
	}
}
int main(){
	cin>>str;
	stack<int>st;
	
	st.push(1);
	
	for(int i=0;i<str.size();i++){
		int p=st.top();
		st.pop();
		
		if(str[i]!='#'){
			a[p]=str[i];
			st.push(2*p+1);
			st.push(2*p);
		}
		else{
			a[p]=-1;
		}
	}
	dfs(1);
	cout<<"\n"<<cnt;
	return 0;
}

5、二叉树非叶子

复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=105;
struct node{
	int value;
	int left;
	int right;
}a[N];
int n;
void xianxu(int idx){
	if(idx==0)return;
	cout<<a[idx-1].value<<" ";
	xianxu(a[idx-1].left);
	xianxu(a[idx-1].right);
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i].value>>a[i].left>>a[i].right;
	}
	
	for(int i=0;i<n;i++){
		if(a[i].left!=0&&a[i].right!=0){
			a[i].value+=1;
		}
	}
	xianxu(1);
	cout<<endl;
	return 0;
}

6、叶子结点加一

复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=105;
struct node{
	int value;
	int left;
	int right;
}a[N];
int n;
void xianxu(int idx){
	if(idx==0)return;
	cout<<a[idx-1].value<<" ";
	xianxu(a[idx-1].left);
	xianxu(a[idx-1].right);
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i].value>>a[i].left>>a[i].right;
	}
	
	for(int i=0;i<n;i++){
		if(a[i].left==0||a[i].right==0){
			a[i].value+=1;
		}
	}
	xianxu(1);
	cout<<endl;
	return 0;
}

7、周末舞会

复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int boy,girl,k;
	cin>>boy>>girl>>k;
	queue<int>b_q,g_q;
	for(int i=1;i<=boy;i++){
		b_q.push(i);
	}
	for(int i=1;i<=girl;i++){
		g_q.push(i);
	}
	
	while(k--){
		int x,y;
		x=b_q.front();
		b_q.pop();
		y=g_q.front();
		g_q.pop();
		cout<<x<<" "<<y<<"\n";
		
		b_q.push(x),g_q.push(y);
		
		
	}
	return 0;
} 
相关推荐
Cx330❀2 小时前
《C++ STL:vector类(下)》:攻克 C++ Vector 的迭代器失效陷阱:从源码层面详解原理与解决方案
开发语言·数据结构·c++·经验分享·算法
user_huenquan2 小时前
胡恩全10.3作业
开发语言·c++
charlie1145141912 小时前
Windows 10系统编程——进程专题:枚举我们进程的状态
c++·windows·学习·操作系统·进程
bawangtianzun2 小时前
树的重心与直径 性质
数据结构·c++·学习·算法
山猪打不过家猪3 小时前
(一)算法
java·开发语言·算法
乌萨奇也要立志学C++3 小时前
【洛谷】6 道题吃透堆的应用:模板堆、第 k 小、最小函数值等全攻略
算法
鄃鳕3 小时前
C++坑系列,C++ std::atomic 拷贝构造函数问题分析与解决方案
java·javascript·c++
code monkey.4 小时前
【探寻C++之旅】第十六章:unordered系列的认识与模拟实现
数据结构·c++·stl
CS创新实验室4 小时前
第7章树和二叉树:树的基本概念
数据结构·二叉树··基本概念
合作小小程序员小小店4 小时前
web网页开发,在线%推荐算法学院培养计划,图书推荐,基于Python,FlaskWeb,用户和物品推荐MySql
python·mysql·算法·flask·推荐算法