数组相关习题,快来利用碎片化时间练习!

文章讲述了如何通过编程解决一个问题,即小鸡哥有10张0-9的数字卡片,要计算能组成多少个不同的10-99之间的两位数。解决方案包括两种情况:一是十位和个位数相同(XX类型),需要两张相同的卡片;二是十位和个位数不同(XY类型),需要两张不同的卡片。通过使用一个数组记录每个数字卡片的数量,遍历10-99的数字,判断能否组成所需数字,最终得出总数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

小鸡哥有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计数,最后得到组成数字的多少种)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值