• 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] = '';
    73         }
    74     }
    75     num[k] = '';
    76 }
    大佬见笑,,
  • 相关阅读:
    程序员的成长阶梯和级别[转]
    【转】教你如何迅速秒杀99%的海量数据处理面试题
    【转】探索C#之布隆过滤器(Bloom filter)
    基于.NET平台常用的框架整理 [转]
    使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]
    使用异步编程
    Node.js Web框架收集
    js闭包的定义与应用
    null 与 undefined 区别
    git 基本操作—笔记
  • 原文地址:https://www.cnblogs.com/xwl3109377858/p/10475035.html
Copyright © 2020-2023  润新知