蓝桥杯C++——试题 算法提高 比大小

这篇博客介绍了如何使用C++处理字符串排序和计数的问题。通过定义结构体数组并利用sort函数,结合自定义比较函数实现字符串的字典序排序。同时,通过遍历和去重操作统计每个字符串的出现次数。提供的参考代码虽然未能通过所有评测点,但展示了基本的解题思路。
摘要由CSDN通过智能技术生成

蓝桥杯试题集试题总汇(C++)

问题描述

       输入n个字符串,比较这些字符串的大小并统计并按字典序输出字符串及出现个数

输入格式

       输入的第一行包含一个整数n,表示字符串个数。接下来n行,表示输入的字符串。

输出格式

       输出n行,每行包含一个字符串及一个整数,表示字符串及出现个数。

样例输入

5
aab
bbc
aab
sdffg
sgjklsa

样例输出

aab 2
bbc 1
sdffg 1
sgjklsa 1

数据规模和约定

        30% l=1
  30% l=10
  20% l<=100
  100% n<=1000,l<=1000

分析

1.一般看到输入n行东东【整数,浮点数,字符……】我们都会想到定义数组以便输入,但好像没有字符串数组哦?此时一个伟大的结构体数组伸出援手。另外要统计字符串出现个数,所以结构体中,我们可以设置字符串和整数以方便记录其个数。

2.对于多个东东比较,我们可以利用C++中的 sort 函数,这里要自定义比较含义。

参考代码

(代码非本人所写:https://blog.csdn.net/weixin_44575764/article/details/108029235

#include<iostream>
#include<algorithm>
using namespace std;

struct Node{
	string str;
	int num;
};
//自定义比较含义
bool cmp(struct Node a,struct Node b){
	return a.str < b.str;
}

int main(){
	struct Node node[1000];
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>node[i].str;
		node[i].num=1;
	}
	
	//排序
	sort(node,node+n,cmp);
	//去重 
	for(int i=0;i<n;){
		int p=i+1;//i指向的为被比较的主元素,p指向i的后一个元素
		while(node[p].str == node[i].str&&p<n){
			node[i].num++;
			node[p].num=0;//另这些重复的元素的num为0,便于后面的输出判断
			p++;//p指向下一个
		}
		i=p;//令i的值为下一个要比较的元素的下标值
	}
	//输出结果
	 for(int i=0;i<n;i++){
	 	if(node[i].num!=0)
	 		cout<<node[i].str<<' '<<node[i].num<<endl;
	 }
	
	return 0;
}

备注:代码没啥问题,但是提交未通过,看了一下评测点

第一个测评点:输入:空白    输出:295443

第四个测评点:输入:空白    输出:0

第五个测评点:输入:
42 18468 6335
19170 26501 15725
11479 29359 26963
5706 24465 28146
16828 23282 9962
492 2996 11943
4828 5437 32392
3903 14605 154
293 12383 17422
18717 19719 19896
输出:
65741

其他测评点输入输出也都是整数。

所以这是个驴唇不对马嘴的测评。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值