PAT-1039 到底买不买(20)(字符串的使用)

2024-06-24 11:38
文章标签 pat 1039 20 字符串 到底 使用

本文主要是介绍PAT-1039 到底买不买(20)(字符串的使用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如,YrR8RrY是小红想做的珠串;那么ppRYYGrrYBR2258可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;ppRYYGrrYB225不能买,因为没有黑色珠子,并且少了一颗红色的珠子。

输入描述:

每个输入包含1个测试用例。每个测试用例分别在2行中先后给出摊主的珠串和小红想做的珠串,两串都不超过1000个珠子。


输出描述:

如果可以买,则在一行中输出“Yes”以及有多少多余的珠子;如果不可以买,则在一行中输出“No”以及缺了多少珠子。其间以1个空格分隔。

输入例子:

ppRYYGrrYBR2258YrR8RrY

输出例子:

Yes 8
#include <stdio.h>
#include <string.h>typedef struct Buble{char buble_type;int buble_num;
}buble;int analysis_fun(char temp1[],buble data[],int len1)
{int i,j;int count;count = 0;for(i = 0;i < len1;i++){if(count == 0){data[count].buble_type = temp1[i];data[count].buble_num = 1;count++;}else{for(j = 0;j <= count;j++)//在筛选队列中进行比较,没有则插入{if(temp1[i] == data[j].buble_type)//筛选队列里面已经有数据了{data[j].buble_num++;break;//如果数据已经存在,直接结束循环}else//帅选队列里没有数据{if(j == count)//插入{data[count].buble_type = temp1[i];//进行插入data[count].buble_num = 1;count++;break;//插入结束,结束循环}}}}}return count;
}int main(void)
{int i,j;char temp1[1000];	char temp2[1000];	
//	char temp1[1000] = "jgawengl3ng39023onhl3nhklw34nhlwe4hj09e4wohnwelknglaw340weGBLASNRHLNR4LBNRLKENSHLKHBRNESLHKNRSELH40NLGSNGgasnlhkrnhslnbshlanr";
//	char temp2[1000] = "aglnelgkanwelgbkhenh34twlng3lnfaldngBGANBKLABNAGLBNALRNLBN";buble data[1000];	buble data2[1000];	int len1, len2; int count,count_buy,count_real,count_lack;count = 0;count_buy = 0;count_real = 0;count_lack = 0;
//	printf("----------0>\n");//scanf("%s",temp1);gets(temp1);gets(temp2);len1 = strlen(temp1);len2 = strlen(temp2);
//	printf("----------1  %d %d>\n",len1,len2);count = analysis_fun(temp1,data,len1);count_buy = analysis_fun(temp2,data2,len2);/*for(i = 0;i < len1;i++){if(count == 0){data[count].buble_type = temp1[0];data[count].buble_num = 1;count++;}else{for(j = 0;j <= count;j++)//在筛选队列中进行比较,没有则插入{if(temp1[i] == data[j].buble_type)//筛选队列里面已经有数据了{data[j].buble_num++;break;//如果数据已经存在,直接结束循环}else//帅选队列里没有数据{if(j == count)//插入{data[count].buble_type = temp1[i];//进行插入data[count].buble_num = 1;count++;break;//插入结束,结束循环}}}}}*/
//	printf("----------2>   %d\n",count);
/*	for(i = 0;i < count;i++){//	printf("  %d     %c \n",data[i].buble_num,data[i].buble_type);}printf("\n");for(i = 0;i < count_buy;i++){//	printf("  %d     %c \n",data2[i].buble_num,data2[i].buble_type);}
*/for(j = 0;j < count;j++){for(i = 0;i < count_buy;i++){if(data2[i].buble_type == data[j].buble_type)//如果元素存在{//要求打印的是缺少的个数if(data2[i].buble_num <= data[j].buble_num)//检查元素个数是否满足需求{count_real++;//满足条件的数据个数count_lack+=data2[i].buble_num;//满足则记下当前需要的元素个数}elsecount_lack+=data[j].buble_num;//注意此处与上一句的区别}elsecontinue;}}
//	printf("----------2>  %d\n",count_lack);if(count_real == count_buy)printf("Yes %d",len1 - len2);elseprintf("No %d",len2-count_lack);//
}

总结:1)本程序在复杂度上没有优势,但是其中用于分解字符串中元素的函数可以用在其他地方。

2)字符串的输入值得多加练习。

这篇关于PAT-1039 到底买不买(20)(字符串的使用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090047

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrl+shift+N,进入无痕模式3. 不需要登录(也就是访客模式)4. 两次用完,关闭无痕模式(继续重复步骤 2 - 4) 1. 打开谷歌浏览器 2. 按住ctrl+shift+N,进入无痕模式 输入网址:https://www.connectedpapers.com/ 3. 不需要登录(也就是

20.Spring5注解介绍

1.配置组件 Configure Components 注解名称说明@Configuration把一个类作为一个loC容 器 ,它的某个方法头上如果注册7@Bean , 就会作为这个Spring容器中的Bean@ComponentScan在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>@Sc

2390.从字符串中移除星号

给你一个包含若干星号 * 的字符串 s 。 在一步操作中,你可以: 选中 s 中的一个星号。 移除星号左侧最近的那个非星号字符,并移除该星号自身。 返回移除 所有 星号之后的字符串。 注意: 生成的输入保证总是可以执行题面中描述的操作。 可以证明结果字符串是唯一的。 示例 1: 输入:s = “leet**cod*e” 输出:“lecoe” 解释:从左到右执行移除操作: 距离第 1 个

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

C#中,decimal类型使用

在Microsoft SQL Server中numeric类型,在C#中使用的时候,需要用decimal类型与其对应,不能使用int等类型。 SQL:numeric C#:decimal