数据结构测试模拟题(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;
} 
相关推荐
贾全7 分钟前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
GIS小天22 分钟前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月4日第128弹
人工智能·算法·机器学习·彩票
oioihoii36 分钟前
C++11 forward_list 从基础到精通:原理、实践与性能优化
c++·性能优化·list
满分观察网友z40 分钟前
开发者的“右”眼:一个树问题如何拯救我的UI设计(199. 二叉树的右视图)
算法
m0_6873998444 分钟前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
森焱森2 小时前
无人机三轴稳定化控制(1)____飞机的稳定控制逻辑
c语言·单片机·算法·无人机
循环过三天2 小时前
3-1 PID算法改进(积分部分)
笔记·stm32·单片机·学习·算法·pid
呆瑜nuage2 小时前
数据结构——堆
数据结构
Ronin3052 小时前
【C++】类型转换
开发语言·c++
蓝澈11212 小时前
弗洛伊德(Floyd)算法-各个顶点之间的最短路径问题
java·数据结构·动态规划