ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
###题目信息 1039. 到底买不买(20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。 为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。 图 1 输入格式: 每个输入包含1个测试用例。每个测试用例分别在2行中先后给出摊主的珠串和小红想做的珠串,两串都不超过1000个珠子。 输出格式: 如果可以买,则在一行中输出“Yes”以及有多少多余的珠子;如果不可以买,则在一行中输出“No”以及缺了多少珠子。其间以1个空格分隔。 输入样例1: ppRYYGrrYBR2258 YrR8RrY 输出样例1: Yes 8 输入样例2: ppRYYGrrYB225 YrR8RrY 输出样例2: No 2 ###代码实现 ``` #include <stdio.h> #include <string.h> void test(); int main () { test(); return 0; } int getBucket(char *str,int *ducket)//实现计数器功能 { int len=0; while(str[len]!='\0') { ducket[(int)str[len]]++;//把str数组各元素给特定的一个ducket[i];i代表每一种颜色,ducket[i]的值就是某一种颜色的数量 len++; } } void test() { #define MAX_STR 1000 int ducket1[128]; int ducket2[128]; int i,d1,d2; char str1[MAX_STR+1]; char str2[MAX_STR+1]; memset(str1,0x00,sizeof(str1));//memset是一个函数用于初始化str数组 memset(str2,0x00,sizeof(str2)); memset(ducket1,0x00,sizeof(ducket1)); memset(ducket2,0x00,sizeof(ducket2)); scanf("%s",str1); scanf("%s",str2); getBucket(str1,ducket1); getBucket(str2,ducket2); d1=d2=0; for(i=0;i<128;i++) { if(ducket1[i]-ducket2[i]<0) { d1+=ducket2[i]-ducket1[i]; } else { d2+=ducket1[i]-ducket2[i]; } } if(d1!=0) { printf("No %d",d1); } else { printf("Yes %d",d2); } } ```