题解与感想
题目上说了输入的数字和字母范围为0-9]、[a-z]、[A-Z],均在ascii码范围内,故可以将读入的给定串字符用一容量为128的int类型数组计数,在读入目标串时,只需相应的将该数组对应位置做--操作,最后遍历该数组,若某一位的值小于0,则肯定不能买,相应的,小于0的位的和的相反数则为缺少的个数;与之相对,若每一位的值不小于0,则肯定能买,相应的,大于0的位的和则为多出来的个数。
源码
#include"stdio.h"
int main()
{
int tell[128]={0};
int more=0,less=0;
char x;
//输入欲判断的数组
while((x=getchar())!='\n')
{ tell[(int)x]++;
}
//输入目标数组
while((x=getchar())!='\n')
{ tell[(int)x]--;
}
//判断
for(int i=0;i<128;i++)
{ if(tell[i]>0) {more+=tell[i];}
else if(tell[i]<0) {less-=tell[i];}
}
//给出结论
if(less){printf("No %d",less);}
else {printf("Yes %d",more);}
return 0;
}