牛客OI周赛7-提高组(A 小睿睿的等式)

探讨了在给定火柴棒数量下,如何找出所有可能的数学等式“A+B=n”,并确保所用火柴棒数等于总数的特定比例。通过算法分析,解决了输入数据范围内的所有情况。

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

题目描述
小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n/k的等式有多少种(B+A=n与A+B=n看作一种)
注:
在这里插入图片描述
“=”与“+”分别需要使用2根火柴棒

输入描述:
一行2个整数n,k,保证n取模k为0
输出描述:
一行一个整数,表示答案

示例1
输入
60 2

输出
4

说明
11+49=60
13+47=60
17+43=60
19+41=60

示例2
输入
100000 1250

输出
3092

备注:
对于30%的数据,0<=n<=100

对于50%的数据,0<=n<=1000000

对于100%的数据,0<=n<=50000000;A,B>=0

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	long long int n,k,t,a[10]={6,2,5,5,4,5,6,3,7,6},i,s,s1,cnt=0,x=0,s2,y=0,m=0;
	scanf("%lld %lld",&n,&k);
	t=n/k-4;
	s=n;
	while(s>0)
	{
		x=x+a[s%10];
		s=s/10;
		y++;
	}
	s2=x;
	x=x+6;
	if(x==t)
		cnt++;
	if(21*y<t)
	{
		cout<<0<<endl;
	}
	else
	{
		for(i=1;i<=n/2;i++)
		{
			x=0;
			s=i;
			s1=n-i;
			while(s>0)
			{
				if(x>t)
				{
					m=1;
					break;
				}
				x=x+a[s%10];
				s=s/10;
			}
			if(m==1)
			{
				m=0;
				continue;
			}
			if(x>t)
			{
				continue;
			}
			while(s1>0)
			{
				if(x>t)
				{
					m=1;
					break;
				}
				x=x+a[s1%10];
				s1=s1/10;
			}
			if(m==1)
			{
				m=0;
				continue;
			}
			if((x+s2)==t)
				cnt++;
		}
		cout<<cnt<<endl;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值