专栏文章

题解:P1149 [NOIP2008 提高组] 火柴棒等式

P1149题解参与者 4已保存评论 3

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
3 条
当前快照
1 份
快照标识符
@miqdnx7j
此快照首次捕获于
2025/12/04 03:06
3 个月前
此快照最后确认于
2025/12/04 03:06
3 个月前
查看原文
外话:一看到这题我就想到今年的 CSP-J 的第 33 题。
本题算法:枚举。
我们可以枚举第一个加数 ii,再枚举第二个加数 jj,然后我们就可以算出 i+ji+j 的和。如果 i+j=(i+j)i+j=(i+j) 这个算式刚好用了 nn 根小棒,计数器加一。
除此之外,我们还要定义一个数组 numnum,存的是摆 090-9 这些数字各自需要的小棒数量,数量我们可以从题目的图片中得到。
代码:
CPP
#include<bits/stdc++.h>
using namespace std;
const int r=1005;
int num[]={6,2,5,5,4,5,6,3,7,6};
int check(int x)
{
	int a=0;
	if(x==0)//如果x=0需要特判,因为下面的循环进不去
	{
		a=num[x];
		return a;
	}
	while(x)
	{
		int mod=x%10;
		a+=num[mod];
		x/=10;
	}
	return a;
}
signed main()
{
	int n;
	cin>>n;
	int total=0;
	for(int i=0;i<=r;i++)//枚举第一个加数
	{
		for(int j=0;j<=r;j++)//枚举第二哥加数
		{
			int he=i+j;
			if(check(i)+check(j)+check(he)+4==n)//注意,需要加4,因为加号和等于号也需要小棒
			{
				total++;
			}
		}
	}
	cout<<total;
	return 0;
}

评论

3 条评论,欢迎与作者交流。

正在加载评论...