B - 嘉然今天吃什么
Description
嘉然是 \text{A-Soul}A-Soul 的一位虚拟主播,人设是贪吃、可爱,嘉然不仅能吃还超可爱 ,所以嘉然的粉丝都被称为“嘉心糖”。
嘉然由于最近体重超标,被邪恶的队长贝拉 \text{gank}gank 了,没收了所有的小零食,因此最近的嘉然暂时失去了神力。
一天,嘉然狡猾的朋友乃琳拿了一根小鸡腿来给嘉然恰,我超,嘉然一见到就留下了口水。
但是乃琳居然要求嘉然回答出她的问题才能吃小鸡腿,否则就要夺走嘉然溜嘉心糖的权力。暂时失去了神力的嘉然回答不粗来了捏,就对着乃琳撒娇。
作为坐在屏幕前的鼠鼠,你已经看不下去了,所以请你帮助然然解决下面的问题:
给定一个正整数 nn,找出所有 1 \sim n1∼n 内满足下列条件的一对正整数 a,ba,b 的个数
2 \times a+3 \times b = n2×a+3×b=n
其中 a,ba,b 必须都是 \text{Diana}Diana 数
\text{Diana}Diana 数:
设正整数 xx 的 各位数字之和 为 yy ,如果 xx 能恰好能 被 yy 整除,那么则称 xx 为 \text{Diana}Diana 数。
例如 280280 的各位数字之和为 2 + 8 + 0 = 102+8+0=10 ,且 280280 能恰好被 1010 整除 (280 \div 10 = 28280÷10=28),所以 280280 为 \text{Diana}Diana 数, 例如 131131 的各位数字之和是 1 +3 + 1 = 51+3+1=5 ,但 131131 不能被 55 整除,所以 131131 不是 \text{Diana}Diana 数。
Input
输入的第一行包含一个正整数 nn (1\le n\le 2 \times 10 ^ {6}1≤n≤2×106) 。
Output
输出一个整数 , 表示答案。
Sample
Input
100 23333 114514
Output
2 17 175
Hint
样例 11 解释:
n = 100n=100,在 1 \sim 1001∼100 内的数字,只有两对数字满足条件。第一对为 55 和 3030 ,都为 \text{Diana}Diana 数,且 2 \times 5 + 3 \times 30 = 1002×5+3×30=100 ,第二对为 2020 和 2020,都为 \text{Diana}Diana 数,且 2 \times 20 + 3 \times 20 = 1002×20+3×20=100,故答案为 22。
本题为单组输入,样例为三组独立数据
代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,ans;
int main()
{
cin>>n;
for(int a=1;a<=n;a++)
{
int b=n-2*a;
if(b%3==0&&b>=1&&b<=n)
{
b/=3;
int s1=0,s2=0,t1=a,t2=b;
while(t1)
{
s1+=t1%10;
t1/=10;
}
while(t2)
{
s2+=t2%10;
t2/=10;
}
if(a%s1==0&&b%s2==0)
{
ans++;
}
}
}
cout<<ans;
}