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;
}