数据结构测试模拟题(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;
} 
相关推荐
孞㐑¥1 分钟前
Linux之进程间通信
linux·c++·经验分享·笔记
小纭在努力2 分钟前
【算法设计与分析】实验——改写二分搜索算法,众数问题(算法分析:主要算法思路),有重复元素的排列问题,整数因子分解问题(算法实现:过程,分析,小结)
数据结构·python·学习·算法·算法设计与分析·实验报告·实验
kukubuzai3 分钟前
c++继承
c++·学习
埃伊蟹黄面3 分钟前
C++ —— STL容器——string类
c++
芜湖xin1 小时前
【题解-洛谷】B4278 [蓝桥杯青少年组国赛 2023] 简单算术题
算法·
理智的灰太狼1 小时前
题目 3298: 蓝桥杯2024年第十五届决赛真题-兔子集结
算法·职场和发展·蓝桥杯
kingmax542120084 小时前
【洛谷P9303题解】AC- [CCC 2023 J5] CCC Word Hunt
数据结构·c++·算法·广度优先
白熊1885 小时前
【机器学习基础】机器学习入门核心算法:XGBoost 和 LightGBM
人工智能·算法·机器学习
bai_lan_ya5 小时前
数据结构-排序-排序的七种算法(2)
数据结构·算法·排序算法
全域智图6 小时前
元胞自动机(Cellular Automata, CA)
人工智能·算法·机器学习