数字排序

【描述】输入n个数,对这n个数按从小到大的顺序排序
【输入】输入数据的第一行为正整数n,2≤n≤20;第二行有n个整数,用空格隔开。
【输出】输出占一行,为排序后的n个整数,用空格隔开。
【样例输入】
8
49 38 65 97 76 13 27 30
【样例输出】
13 27 30 38 49 65 76 97


#include<iostream>
using namespace std;
int main()
{
    int n,a[22],b[22];//存储输入的n个数及排序后的n个数
    int i,j,k;//循环变量
    int pos;//每个数的插入位置
    cin>>n;
    for(i=0;i<n;i++)//输入
        cin>>a[i];
    for(i=0;i<n;i++){//将a[i]插入合适的位置
        //在数组b中,b[0]~b[i-1]已经有序了,给a[i]找到合适位置(1)
        for(j=0;j<=i-1;j++)
            if(b[j]>a[i]) break;
        pos=j;//a[i]的插入位置
        for(k=i-1;k>=pos;k--)//将b[pos]~b[i-1]后移一个位置(2)
            b[k+1]=b[k];
        b[pos]=a[i];//将a[i]放置在b[pos]在b[pos]位置上(3)
    }
    for(i=0;i<n;i++)//输出
        cout<<b[i]<<" ";
    cout<<endl;
	return 0;
}

/*
【输入用例2】
2  
5 3  
【输出用例2】
3 5
【输入用例3】
5  
2 2 1 3 2  
【输出用例3】
1 2 2 2 3
【输入用例4】
6  
6 5 4 3 2 1  
【输出用例4】
1 2 3 4 5 6 
【输入用例5】
4  
7 7 7 7 
【输出用例5】
7 7 7 7
【输入用例6】
9  
49 38 65 97 76 13 27 30  89 
【输出用例6】
13 27 30 38 49 65 76 89 97 
*/

整数奇偶排序

【描述】给定10个整数的序列,要求对其重新排序。排序要求:
1.奇数在前,偶数在后;
2.奇数按从大到小排序;
3.偶数按从小到大排序。
【输入】
输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于30000。
【输出】
按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。
【输入样例】
4 7 3 13 11 12 0 47 34 98
【输出样例】
47 13 11 7 3 0 4 12 34 98


#include<bits/stdc++.h>
using namespace std;
int c,a[100],b[100],s=0,k=0,i,j,t,r,y;
int main() {
	for(i=0; i<10; i++) {
		cin>>c;
		if(c%2==1) 
            a[s++]=c;
		else 
            b[k++]=c;
	}
	for(i=1; i<s; i++) {//奇数排序
		for(j=0; j<i; j++)
			if(a[j]<=a[i]) break;
		if(j!=i) 
        {
			t=a[i];
			for(r=i-1; r>=j; r--) 
            {
				a[r+1]=a[r];
			}
			a[j]=t;
		}
	}
	for(i=1; i<k; i++) {//偶数排序
		for(j=0; j<i; j++)
			if(b[j]>=b[i]) break;
		if(j!=i) 
        {
			y=b[i];
			for(r=i-1; r>=j; r--) 
            {
				b[r+1]=b[r];
			}
			b[j]=y;
		}
	}
	for(i=0; i<s; i++)//输出
		cout<<a[i]<<" ";
	for(i=0; i<k; i++)
		cout<<b[i]<<" ";
	return 0;
}

/*
【输入用例2】
9 5 3 7 1 11 15 17 19 21  
【输出用例2】
21 19 17 15 11 9 7 5 3 1
【输入用例3】
0 2 4 6 8 10 12 14 16 18  
【输出用例3】
0 2 4 6 8 10 12 14 16 18
【输入用例4】
0 1 2 3 4 5 6 7 8 9  
【输出用例4】
9 7 5 3 1 0 2 4 6 8
【输入用例5】
5 3 5 3 5 3 5 3 5 3  
【输出用例5】
5 5 5 5 5 3 3 3 3 3
*/

合影效果

【描述】小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?
【输入】
第一行是人数n(2 <= n <= 40,且至少有1个男生和1个女生)。
后面紧跟n行,每行输入一个人的性别(男male或女female)和身高(浮点数,单位米),两个数据之间以空格分隔。
【输出】
n个浮点数,模拟站好队后,拍照者眼中从左到右每个人的身高。每个浮点数需保留到小数点后2位,相邻两个数之间用单个空格隔开。
【输入样例】
6
male 1.72
male 1.78
female 1.61
male 1.65
female 1.70
female 1.56
【输出样例】
1.65 1.72 1.78 1.70 1.61 1.56


#include<bits/stdc++.h>
using namespace std;
struct que
{
	string nv;
	double high;
}a[40],b[40];

int main()
{
	string y;
	double u;
	int n,z=0,x=0;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>y>>u;
		if(y=="male")
		{
			a[z].nv=y;
			a[z++].high=u;
		}
		else
		{
			b[x].nv=y;
			b[x++].high=u;
		}
	}
	que temp,temp2;
	for(int i=0;i<z-1;i++)
	{
		for(int j=0;j<z-1-i;j++)
		{
			if(a[j].high>a[j+1].high)
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;	
			}
		}
	}
	cout<<fixed<<setprecision(2);
	for(int i=0;i<z;i++)
	{
		cout<<a[i].high<<" ";
	}
	for(int i=0;i<x-1;i++)
	{
		for(int j=0;j<x-1-i;j++)
		{
			if(b[j].high<b[j+1].high)
			{
				temp=b[j];
				b[j]=b[j+1];
				b[j+1]=temp;
			}
		}
	}
	for(int i=0;i<x;i++)
	{
		cout<<b[i].high<<" ";
	}
	return 0;
}

/*
【输入用例2】
2  
male 1.80  
female 1.75 
【输出用例2】
1.80 1.75
【输入用例3】
5  
male 1.75  
female 1.65  
male 1.80  
female 1.70  
male 1.60  
【输出用例3】
1.60 1.75 1.80 1.70 1.65
【输入用例4】
3  
male 1.50  
female 1.90  
male 1.80  
【输出用例4】
1.50 1.80 1.90
【输入用例5】
4  
male 1.70  
male 1.70  
female 1.60  
female 1.60  
【输出用例5】
1.70 1.70 1.60 1.60
*/

看病登记

【描述】病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:

  1. 老年人(年龄 >= 60 岁)比非老年人优先看病。
  2. 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
  3. 非老年人按登记的先后顺序看病。
    【输入】
    第1行,输入一个整数 ,表示病人的个数;
    后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病
    人的 ID(只含数字和字母),一个整数表示病人的年龄( 100之间的整数),中间用单个空格隔开
    【输出】
    按排好的看病顺序输出病人的ID和年龄,每行一个。
    【输入样例】
    5
    021075 40
    004003 15
    010158 67
    021033 75
    102012 30
    【输出样例】
    021033 75
    010158 67
    021075 40
    004003 15
    102012 30

#include <bits/stdc++.h>
using namespace std;
struct Patient {
    int number;   // 登记的顺序
    char id[11];  // 病人ID
    int age;      // 年龄
} a[1010];
int n;
bool cmp(Patient a, Patient b) {
    if (a.age >= 60 && b.age >= 60) {   //a,b都是老年人
        if (a.age != b.age) // 如果年龄不一样
            return a.age > b.age;   // 按年龄从大到小排
        else    // 否则,年龄一样
            return a.number < b.number;  // 按登记顺序排
    }
    else if (a.age >= 60)   // a是老人,b不是老人
        return true;    // a排前面
    else if (b.age >= 60)   // b是老人,a不是老人
        return false;   // b排前面
    else        // 两个都是年轻人
        return a.number < b.number;  // 按登记顺序排
}
int main() {
    cin >> n;
    for (int i = 0; i < n; i ++) {
        cin >> a[i].id >> a[i].age;
        a[i].number = i;    // 用 i 来表示 第 i 个病人的登记顺序
    }
    sort(a, a+n, cmp);
    for (int i = 0; i < n; i ++)
        cout << a[i].id << endl;
    return 0;
}

/*
【输入用例2】
3
001 65
002 70
003 65
【输出用例2】
002 70
001 65
003 65
【输入用例3】
4
004 20
005 25
006 20
007 25
【输出用例3】
004 20
005 25
006 20
007 25
【输入用例4】
2
008 0
009 60
【输出用例4】
009 60
008 0
【输入用例5】
3
010 60
011 60
012 60
【输出用例5】
010 60
011 60
012 60
*/

更多推荐