乐逍遥xwl

导航

1039 到底买不买

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。

为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。

figbuy.jpg

图 1

输入格式:

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

输出格式:

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

输入样例 1:

ppRYYGrrYBR2258
YrR8RrY

输出样例 1:

Yes 8

输入样例 2:

ppRYYGrrYB225
YrR8RrY

输出样例 2:

No 2
 
思路:我这里主要用了个字符串去重函数......
 
 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<string.h>
 4 #include<stdlib.h>
 5 void change(char num2[],int len2);
 6 int main()
 7 {
 8     int book1[200]={0};
 9     int book2[200]={0};
10     char num1[1001],num2[1001];
11     gets(num1);
12     gets(num2);
13     char str;
14     int len1=strlen(num1);
15     int len2=strlen(num2);
16     for(int i=0;i<len1;i++)
17     {
18         str=num1[i];
19         book1[str]++;
20     }
21     for(int i=0;i<len2;i++)
22     {
23         str=num2[i];
24         book2[str]++;
25     }
26     int t=0;
27     for(int i=0;i<len2;i++)
28     {
29         str=num2[i];
30         if(book1[str]>=book2[str])
31         {
32         book2[str]=0;
33         book1[str]=book1[str]-book2[str];
34         t++;
35         }
36         else if(book1[str]<book2[str])
37         {
38             book2[str]=book2[str]-book1[str];
39             book1[str]=0;
40         }
41     }
42     int sum=0;
43     change(num2,len2);//字符串去重 
44     int len3=strlen(num2);
45     if(t==len2)
46     {
47         printf("Yes %d",len1-len2);
48     }
49     else if(t<len2)
50     {
51         for(int i=0;i<len3;i++)
52         {
53             str=num2[i];
54             sum=sum+book2[str];
55         }
56         printf("No %d",sum);
57     }
58     return 0;
59 }
60 void change(char num[],int len)
61 {
62 
63     int i, j, k;
64  
65     for(i = k = 0; i < len; i++)
66     {
67         if(num[i])
68         {
69             num[k++] = num[i];
70             for(j = i + 1; j < len; j++)
71                 if(num[j] == num[i])
72                     num[j] = '\0';
73         }
74     }
75     num[k] = '\0';
76 }

 

 

posted on 2019-03-05 10:17  乐逍遥xwl  阅读(132)  评论(0编辑  收藏  举报