洛谷 P1149 火柴棒等式

在这里插入图片描述
思路:将数字转换为火柴棒个数,两层循环遍历a和b,如果符合func(a)+func(b)+func(a+b)==n则记录一次

#include<bits/stdc++.h>
using namespace std;
const int MAXNUM = 1000;
int func(int n) {//将数字转换为火柴棒个数
	int x[10] = { 6,2,5,5,4,5,6,3,7,6 };//记录每个数字的火柴棒个数
	int sum = 0;
	if (n == 0)return x[0];//特判
	while (n) {//从最低位到最高位计算火柴棒个数
		sum += x[n % 10];
		n /= 10;
	}
	return sum;
}
int main()
{
	int n;
	cin >> n;
	n -= 4;//出去加号和等号
	int cnt = 0;//计数
	for(int a=0;a<MAXNUM;a++) 
		for(int b=0;b<=a;b++) 
			if (func(a) + func(b) + func(a + b)==n) {
				if (a == b)cnt++;//ab相等算一次
				else cnt += 2;//ab不等算两个
			}
	cout << cnt;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值