ACM程序设计课内实验(2) 排序问题

基础知识‘

sort函数

C++中的sort函数是库中的一个函数,用于对容器中的元素进行排序。它的原型如下:

template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
参数说明:
  • first:指向要排序序列的第一个元素的迭代器。
  • last:指向要排序序列的最后一个元素的下一个位置的迭代器。
  • comp:一个比较函数,用于指定排序的顺序。默认情况下,它使用operator<进行升序排序。如果需要降序排序,可以提供一个自定义的比较函数。

qsort函数

C++中的qsort函数是一个通用的排序函数,它位于头文件中。qsort函数接受一个数组、数组的大小以及一个比较函数作为参数。比较函数用于确定数组中元素的顺序。

#include <cstdlib>
#include <iostream>
#include <algorithm>

using namespace std;

//定义比较函数,用于排序
int cmp(const void *a, const void *b)
{
    int *pa=(int *)a;
    int *pb=(int *)b;
    
    return *pa-*pb;
}

int main()
{
    int arr[]={10, 8, 2, 6, 7, 3};
    int len=sizeof(arr)/sizeof(arr[0]);

    qsort(arr, len, sizeof(int), cmp);
    
    for(int i=0;i<len;i++)
    {
        cout<<arr[i]<<" ";
    }
    
    return 0;
}

 1.排序

Description

给你很多行数,将每行数排序(从小到大)!

Input

输入数据有很多行,每行10个正整数。

Output

将每行数从小到大输出。

Sample Input

10 9 8 7 6 5 4 3 2 1

Sample Output

1 2 3 4 5 6 7 8 9 10
#include <iostream>
#include <sstream>
#include <algorithm>

using namespace std;

// 快速排序函数,arr为待排序数组,left为左边界,right为右边界
void quickSort(int arr[], int left, int right) {
    if (left < right) {
        int pivot = arr[left]; // 选择基准值
        int i = left; // 左指针
        int j = right; // 右指针
        while (i < j) {
            // 从右向左找到第一个小于基准值的元素
            while (i < j && arr[j] >= pivot) {
                j--;
            }
            // 如果找到了,将其与左指针指向的元素交换,并将左指针向右移动一位
            if (i < j) {
                arr[i++] = arr[j];
            }
            // 从左向右找到第一个大于基准值的元素
            while (i < j && arr[i] < pivot) {
                i++;
            }
            // 如果找到了,将其与右指针指向的元素交换,并将右指针向左移动一位
            if (i < j) {
                arr[j--] = arr[i];
            }
        }
        // 将基准值放到正确的位置上
        arr[i] = pivot;
        // 递归地对左右两部分进行快速排序
        quickSort(arr, left, i - 1);
        quickSort(arr, i + 1, right);
    }
}

int main() {
    int arr[100];
    while(scanf("%d",&arr[0])!=EOF){ 

        for(int i=1; i<10; i++) 
            scanf("%d",&arr[i]);
        quickSort(arr, 0, 9);
        for (int i = 0; i < 10; i++) { 
            cout << arr[i] << " ";
        }
        cout << endl; 
    }
    return 0;
}

 2.枫之舞------排序

Description

你会排序吗?请将给出的数据按(升序)排序~~ 

Input

输入数据有多组,首先输入一个T,代表有T组数,然后是T行,每行开头是N,代表有N个数需要排序,然后就是这N个要排序的数了!N大于1且小于1000. 

Output

把数据从小到大排序。

Sample Input

2
3 2 1 3
9 1 4 7 2 5 8 3 6 9

Sample Output

1 2 3
1 2 3 4 5 6 7 8 9
#include <bits/stdc++.h>
using namespace std;
int x[1005];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
            scanf("%d",&x[i]);
        sort(x,x+n,less<int>());
        for(int i=0;i<n-1;i++)
            printf("%d ",x[i]);
        printf("%d",x[n-1]);
        printf("\n");
    }
    return 0;
}

 3.让气球飞吧

Description

国际大学生程序设计竞赛已经发展成为最具影响力的大学生计算机竞赛,ACM-ICPC以团队的形式代表各学校参赛,每队由3名队员组成,一个队每做出来一个题该队就会获得该题对应颜色的气球,气球越多就说明该队做的题目越多。当然如果一个颜色的气球越多就说明该气球对应的题也就越简单。现在给你很多很多的颜色的气球,问你那个颜色的气球最多,哈哈,聪明的acmer这题对你肯定很简单吧, just ac it!

Input

假设只有6种颜色,green,red,blue,pink,orange,black。输入数据有多组,每组数据开始给出一个整数n代表接下来有n个气球,接下来有n行,每行输入一种颜色,n <= 100,输入以EOF结束。

Output

输出个数最多的气球的颜色(题目保证个数最多的气球有且仅有一种颜色)

Sample Input

3
green
red
green
5
green
red
blue
red
red

Sample Output

green
red
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char b[6][10]= {"red","green","blue","pink","black","orange"};
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int res[6]= {0};
        int k;
        for(k=0; k<n; k++)
        {
            char a[10];
            scanf("%s",a);
            int i;
            for(i=0; i<6; i++)
            {
                if(strcmp(b[i],a)==0)
                    res[i]++;
            }
        }
        int num=0,max=res[0];
        int j;
        for(j=1; j<6; j++)
        {
            if(max<res[j])
            {
                max=res[j];
                num=j;
            }
        }
        printf("%s\n",b[num]);
    }
    return 0;
}

改进

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    int n;
    string color;
    map<string, int> color_count;

    while (scanf("%d",&n)!=EOF) {
        color_count.clear();
        for (int i = 0; i < n; i++) {
            cin>>color;
            color_count[color]++;
        }
        string max_color = "";
        int max_count = 0;
        for (const auto &p : color_count) {
            if (p.second > max_count) {
                max_count = p.second;
                max_color = p.first;
            }
        }

        cout << max_color << endl;

    }


    return 0;
}

4.Google is Feeling Lucky

描述

        谷歌是最著名的互联网搜索引擎之一,它托管和开发了许多基于互联网的服务和产品。在其搜索引擎网站上,一个有趣的按钮“我感觉很幸运”吸引了我们的眼球。该功能可以允许用户跳过搜索结果页面,直接进入排名第一的页面。


        太神了它节省了很多时间。


        问题是,当一个人键入一些关键词并按下“我感觉很幸运”按钮时,会出现哪个网页?谷歌做了很多工作,并提出了很好的方法来处理它。在这个简化的问题中,让我们只考虑谷歌为每个网页分配一个整数值的相关性。将选择最相关的页面。如果出现平局,则可以选择相关性最高的所有页面。


        你的任务很简单,给定10个网页及其相关性。只要挑选出所有可能的候选人,当“我感到幸运”时就会提供给用户。

输入

输入包含多个测试用例。测试用例的数量T在输入文件的第一行中。
对于每个测试用例,有10行描述网页和相关性。每一行都包含一个字符串,没有任何空白字符表示该网页的URL,以及一个整数Vi表示该网页相关性。URL的长度介于1和100之间(包括1和100)。(1<=Vi<=100)

输出

对于每个测试用例,输出几行,这些行是可以选择的网页的URL。URL的顺序与输入的顺序相同。
有关输出格式的更多信息,请查看示例输出。

样本输入

2
www.youtube.com 1
www.google.com 2
www.google.com.hk 3
www.alibaba.com 10
www.taobao.com 5
www.bad.com 10
www.good.com 7
www.fudan.edu.cn 8
www.university.edu.cn 9
acm.university.edu.cn 10


www.youtube.com 1
www.google.com 2
www.google.com.hk 3
www.alibaba.com 11
www.taobao.com 5
www.bad.com 10
www.good.com 7
www.fudan.edu.cn 8
www.university.edu.cn 9
acm.university.edu.cn 10


样本输出

案例1:
www.alibaba.com
www.bad.com
acm.university.edu.cn
案例2:
www.alibaba.com

方法一

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    int n=1;
    while(t--)
    {
        char ch[12][120];
        int num[12];
        for(int i=1; i<=10; i++)
            cin>>ch[i]>>num[i];
        int maxn=-999999;
        for(int i=1; i<=10; i++)
        {
            if(num[i]>maxn)
                maxn=num[i];
        }
        printf("Case #%d:\n",n);
        n++;
        for(int i=1; i<=10; i++)
            if(num[i]==maxn)
                cout<<ch[i]<<endl;
    }
    return 0;
}

 方法二

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

struct WebPage {
    string url;
    int relevance;
};

bool compare(const WebPage &a, const WebPage &b) {
    if (a.relevance == b.relevance) {
        return a.url < b.url;
    }
    return a.relevance > b.relevance;
}

int main() {
    int T;
    cin >> T;
    for (int t = 0; t < T; ++t) {
        WebPage webPages[10];
        for (int i = 0; i < 10; ++i) {
            cin >> webPages[i].url >> webPages[i].relevance;
        }
        sort(webPages, webPages + 10, compare);
        cout << "Case #" << t + 1 << ":" << endl;
        cout << webPages[0].url << endl;
        for (int i = 1; i < 10; ++i) {
            if(webPages[i].relevance == webPages[0].relevance)
                 cout << webPages[i].url << endl;

        }
        cout << endl;
    }
    return 0;
}

5.数字排序

Description

现在给出一个不超过1000个数字(允许重复),小新想知道其中的数字
是第几小的数,例如给出5 4 4 2 1,1就是第一小的数,4就是第3小的数,5
就是滴小的数。

Input

多组样例。每组第一行是一个整数n,跟着n(n <= 1000)个整数(a1,a2,a3,……,an),
第二行一个整数m( m < 100)表示将要询问的次数,跟着m个整数(b1,b2,b3……,bn)

Output

对于每次询问输出一行,表示bi(i >= 1&& i <= m)是第几小的数,如果aj(j >= 1 && j <= n)中
不存在bj则直接输出-1.

Sample Input

5 5 4 4 2 1
3 1 4 5
3 1 3 2
3 1 4 2

Sample Output

1
3
4
1
-1
2
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
set<int> vis;
set<int>::iterator it;
int main()
{
    int i,j,m,n,flag,k;
    while(cin>>n)
    {
        vis.clear();
        for(i=1;i<=n;i++)
        {
            cin>>m;
            vis.insert(m);
        }
        cin>>m;
        int p;
        for(i=1;i<=m;i++)
        {
            flag=-1;cin>>p;
            for(it=vis.begin(),k=1;it!=vis.end();it++,k++)
            {
                if(p==*it){flag=k;break;}
            }
            cout<<flag<<endl;
        }
    }
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/205621.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第四十八天【动态规划part09】 | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 当前房屋偷与不偷取决于前一个房屋是否被偷了 动规五部曲 确定dp数组及其下标含义&#xff1a;考虑下标i&#xff08;包括i&#xff09…

用户注册这样玩,保你平安

前言 基本上每个系统系统都包含用户注册、发送验证码等基本操作。在前些年&#xff0c;我还记得我在逛 csdn、贴吧、网易新闻等网站的时候是可以不登陆也能浏览完网页内容的&#xff0c;但是近几年这些网站已经改成了不登陆不让用&#xff0c;浏览网页时不时提醒你要进行登录&…

finebi 新手入门案例

finebi 新手入门案例 连锁超市销售数据分析 步骤&#xff1a; 准备公共数据新建分析主题处理数据在数据中分析在图形中分析数据大屏 准备公共数据 点击公共数据 点击新建文件夹 修改文件夹名称 上传数据 鼠标悬停在文件夹上&#xff0c;右侧出现 鼠标悬停在文件夹上&#x…

ESP32-Web-Server编程- 通过 Highcharts 创建图表(Chart)实时显示设备信息

ESP32-Web-Server编程- 通过 Highcharts 创建图表&#xff08;Chart&#xff09;实时显示设备信息 概述 上节讲述了通过 Server-Sent Events&#xff08;以下简称 SSE&#xff09; 实现在网页实时更新 ESP32 Web 服务器的传感器数据&#xff0c;并通过表格显示传感器的数据。…

Python中的Slice函数:灵活而强大的序列切片技术

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python中的Slice函数是一种强大且灵活的序列切片技术&#xff0c;用于从字符串、列表、元组等序列类型中提取子集。本文将深入研究Slice函数的功能和用法&#xff0c;提供详细的示例代码和解释&#xff0c;帮助读…

学习k8s的介绍(一)

一、kubernetes及Docker相关介绍 1、kubernetes是什么 1-1、简称为k8s或kube&#xff0c;是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 声明式配置语法&#xff1a; kubectl create/apply/delete -f xx…

酷狗音乐app 评论signature

文章目录 声明目标加密参数定位翻页逻辑代码实现 声明 本文章中所有内容仅供学习交流&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请私信我立即删除&#xff01; 目标 复制curl转python # -*- c…

下载MySQL JDBC驱动的方法

说明 java代码通过JDBC访问MySQL数据库&#xff0c;需要MySQL JDBC驱动。 例如&#xff0c;下面这段代码&#xff0c;因为找不到JDBC驱动&#xff0c;所以执行会报异常&#xff1a; package com.thb;public class JDBCDemo {public static void main(String[] args) throws …

特征变换1

编译工具&#xff1a;PyCharm 有些编译工具不用写print可以直接将数据打印出来&#xff0c;pycharm需要写print才会打印出来。 概念 1.特征类型 特征的类型&#xff1a;“离散型”和“连续型” 机器学习算法对特征的类型是有要求的&#xff0c;不是任意类型的特征都可以随意…

Mybatisplus同时向两张表里插入数据[事务的一致性]

一、需求&#xff1a;把靶器官的数据&#xff0c;单独拿出来作为一个从表&#xff0c;以List的方式接收这段数据&#xff1b; 此时分析&#xff0c;是需要有两个实体的&#xff0c;一个是主表的实体&#xff0c;一个是从表的实体&#xff0c;并在主表实体新增一个List 字段来接…

Vue - Vue配置proxy代理,开发、测试、生产环境

1、新建三个环境的配置文件 在src同级目录也就是根目录下新建文件&#xff1a;.env.development&#xff08;开发环境&#xff09;、.env.test&#xff08;测试环境&#xff09;、.env.production文件&#xff08;生产环境&#xff09; 2、三个环境的配置文件 开发环境 .env…

木鸟途家美团......订民宿选哪个?看完让你不纠结

近日&#xff0c;中国旅游研究院在报告中提到&#xff0c;截至2023年6月&#xff0c;我国在线旅行预订用户规模达4.54亿&#xff0c;占网民整体的42.1%。民宿预订平台作为重要的组成部分&#xff0c;正在被更多人了解使用。当前民宿行业第一梯队木鸟、途家、美团三家&#xff0…

3dsMax插件Datasmith Exporter安装使用方法

3dsMax插件Datasmith Exporter安装使用方法 某些文件格式无法用Datasmith直接导入虚幻引擎&#xff0c;这些数据必须先被转换为Datasmith能够识别的文件格式。Datasmith Exporter插件就可以帮助您的软件导出可以被Datasmith导入虚幻引擎的.udatasmith格式文件。 在开始使用虚幻…

windows远程桌面登录,提示:“出现身份验证错误,要求的函数不受支持”

问题&#xff1a; windows登录远程桌面&#xff0c;提示&#xff1a;“出现身份验证错误&#xff0c;要求的函数不受支持”&#xff0c;如下图&#xff1a; 问题原因&#xff1a; windows系统更新&#xff0c;微软系统补丁的更新将 CredSSP 身份验证协议的默认设置进行了调…

PS是什么?PS的在线使用教程

Photoshop简介 AdobePhotoshop&#xff0c;简称“PS“Photoshop主要处理由像素组成的数字图像。Photoshop拥有强大的图像处理工具和绘图工具&#xff0c;可以有效地编辑图片。在最新版本的Photoshop中&#xff0c;甚至可以完成3D和视频的后期工作。 Photoshop是目前最强大的图…

上海线下活动 | LLM 时代的 AI 编译器实践与创新

今年 3 月份&#xff0c; 2023 Meet TVM 系列首次线下活动从上海出发&#xff0c;跨越多个城市&#xff0c;致力于为各地关注 AI 编译器的工程师提供一个学习、交流的平台。 12 月 16 日 2023 Meet TVM 年终聚会将重返上海&#xff0c;这一次我们不仅邀请了 4 位资深的 AI 编…

openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能

文章目录 openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能136.1 检查办法136.2 异常处理 openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能 136.1 检查办法 通过openGauss提供的性能统计工具gs_checkperf可以对硬件性能进行检查。 …

强化学习中的Q学习

Q学习&#xff08;Q-Learning&#xff09;是强化学习中的一种基于值的学习方法&#xff0c;用于在有限马尔可夫决策过程&#xff08;MDP&#xff09;中学习最优的动作策略。Q学习主要用于离散状态和离散动作的问题。 以下是Q学习的基本概念和步骤&#xff1a; Q-Value&#xf…

《C++ Primer》第10章 算法(二)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 10.4 再探迭代器&#xff08;P357&#xff09; 除了为每个容器定义的迭代器外&#xff0c;头文件 iterator 中还定义了额外的几种迭代器&#xff1a; 插入迭代器&#xff08;insert iterator&#xff09;&…

echarts折线图的线呈现动态效果

效果如图 let yData [222, 932, 66, 934, 111, 333, 0],xData ["测1", "测2", "测3", "测4", "测5", "测6", "测7"],datacoords [{coords: [],},];for (var i 0; i < xData.length; i) {datacoo…
最新文章