涂色问题
涂色问题
题目描述:
小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; }
输出:
知行合一,
翻万卷书,游千里路,会百家才