Fork me on GitHub

涂色问题

涂色问题

题目描述:

小A正在学画画,现在,线稿已经画好了,只剩下涂色部分了。但是下A发现,他的颜料不够了。每一块颜料能涂一个色块,每一个色块的颜色是事先决定好了的。

由于颜料不够,小A只能 尽其所能来涂色。如果一个色块没有了颜料,就不能涂色。现在,给你画中需要的色块颜色,和小A现在手上有的颜料,请计算小A能涂多少个色块。

输入描述:

输入包含两个字符串,都仅包含大写字母,每一种字母代表一种颜色。第一个字符串S代表小A手上的颜料,第二个字符串T代表画需要的颜料。

1<=|S|,|T| <= 1000

输出描述:

输出包含一个数,即最多能涂多少色块。

样例输入:

AAB

ABC

样例输出:

2

提示:

小A拥有两个A颜料,一个B颜料,用了一个A颜料一个B颜料,总共涂了两个色块

 

思路:

创建两个数组,arr1[26]、arr2[26],arr1[i]代表小A拥有每种第 i 种颜料的数量,arr2[i] 代表需要的第 i 种颜料的数量,若需要的第 i 种颜料数量 arr2[i] 大于小A拥有的第 i 种颜料的数量 arr2[i],则能涂的色块个数为 srr1[i],

若需要的第 i 种颜料的数量arr2[i] 小于小A拥有的颜料的数量 arr1[i],则能涂的色块数为 arr1[i],然后加上总的,就是最终的小A能涂的色块数

 

代码:

#include <stdio.h>
#include <string.h>

int main()
{
    char s[1000];
    char t[1000];
    scanf("%s%*c", s);  // 输入小A拥有的颜料
    scanf("%s%*c", t);  // 输入需要的颜料
    
    int i;
    int count = 0;
    
    int arr1[26] = {0};
    int arr2[26] = {0};
    
    // 计算小A拥有的每种颜料的数量 
    for(i=0;i<strlen(s);i++)
    {
        arr1[(int)(s[i]-'A')]++;
    }
    
    // 计算需要的每种的颜料的数量 
    for(i=0;i<strlen(t);i++)
    {
        arr2[(int)(t[i]-'A')]++;
    }
    
    // 遍历每种颜料,然后计算每种颜料能涂的色块数 
    for(i=0;i<26;i++)
    {
        if(arr1[i] <= arr2[i])
        {
            count += arr1[i];
        }
        else
        {
            count += arr2[i];
        }
    }
    
    // 输出最终能涂的色块数 
    printf("%d", count);
    
    return 0;
}

输出:

 

posted @ 2020-09-28 19:54  小黑子杜  阅读(377)  评论(0编辑  收藏  举报