题目:
小鸡哥有10张数字卡片,每张卡片上印着0~9的某个数字,小鸡哥依靠这些卡片可以拼出多少个不同的两位数?两位数的范围为:10~99的整数
思路
已知数字范围,那么只需知道每个数字的卡片有几张即可。
代码段
具体分析及内容如代码段中分析
int main()
{
//无非两种情况,第一种:xx类型(十位数与个位数相等,需要两张一样的卡片)
//第二种:xy类型(十位、个位不相等,需要两张卡片都存在)
//因此这个问题被简化为:找到0-9每个数字的卡片所存在的数量
int num[10] = {0};//使用数组的位置来对应数字
for (int i = 0; i < 10; i++)
{
int x;
cin >> x;//输入x,并用数组位置记录x出现的次数
num[x]++;
}
//上述记录完成后,对10-99所有的数字,在数组中比对,判断卡片是否能组成该数字
//第一种:xx类型(十位数与个位数相等,需要两张一样的卡片)
//第二种:xy类型(十位、个位不相等,需要两张卡片都存在)
int count = 0;
bool flag;
for (int i = 10; i <= 99; i++)
{
if (i % 10 == i / 10)//在十位数与个位数相等时
{
if (num[i % 10] >= 2)//十位的数字卡片数量是否有两张以上
{
count++;
}
}
else if (num[i % 10] && num[i / 10])
{
count++;
}
else {
}
}
cout << count << endl;
return 0;
}
这里分两种情况:
情况1:XX数值类型,十位数与个位数相等;需要两张以上一样的卡片
情况2:XY数值类型,十位数与个位数不同;需要不一样的卡片(十位数与个位数都要有)
卡片数量统计方法:数组记录
使用容量10的数组,其数组位置对应0-9数字,数组内数值大小对应卡片数量;因此使用下述代码段记录输入的10个卡片数据,并统计不同数字卡片的数量:
int num[10] = {0};//使用数组的位置来对应数字
for (int i = 0; i < 10; i++)
{
int x;
cin >> x;//输入x,并用数组位置记录x出现的次数
num[x]++;
}
对10-99搜索,判断卡片是否能够组成数字
数字%10 = 十位数;
数字 / 10 = 个位数;
然后判断十位数个位数是否有相应的卡片,这样就可以判断:卡片能够满足10-99上的哪些数字(使用count计数,最后得到组成数字的多少种)