跳转至

A. Friendly Numbers

时间限制:每个测试点1秒
内存限制:每个测试点256兆字节

问题描述

对于一个整数 x,如果存在另一个整数 y 满足以下条件,则称 yx 的友好数:

y - d(y) = x,其中 d(y) 表示 y 的各位数字之和。

对于给定的整数 x,请确定它有多少个友好数。

输入格式

每个测试包含多个测试用例。第一行包含一个整数 t,表示测试用例的数量 (1 \leq t \leq 500)。
接下来是每个测试用例的描述。

每个测试用例为单独一行,包含一个整数 x (1 \leq x \leq 10^9)。

输出格式

对于每个测试用例,输出一个整数——表示该 x 的友好数的个数。

样例输入

3
1
18
998244360

样例输出

0
10
10

样例说明

数字 1 没有任何友好数。

数字 1810 个友好数:即从 2029 的所有整数。
例如,20 - d(20) = 20 - 2 = 18

数字 99824436010 个友好数:

998244400
998244401
998244402
998244403
998244404
998244405
998244406
998244407
998244408
998244409

这个题告诉我们打表的时候看清楚(AC 代码)

// Problem: CF 2197 A
// Contest: Codeforces - Codeforces Round 1079 (Div. 2)
// URL: https://codeforces.com/contest/2197/problem/A
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;

int d(int x){
    int sum=0;
    while(x){
        sum+=x%10;
        x/=10;
    }
    return sum;
}

void solve(){
    int n;
    cin>>n;
    if(n%9==0){
        int flag=0;
        for(int i=0;i<300;i++){
            int t=n+i;
            if(t-d(t)==n){
                flag=1;
                break;
            }
        }

        if(flag) cout<<10<<endl;
        else cout<<0<<endl;
    }
    else cout<<0<<endl;

    return ;
}


int main(){
    // vector<int> st(300);
//  
    // for(int i=0;i<=1000;i++){
        // cout<<(i-d(i))/9<<"-- ";
        // //st[(i-d(i))/9]=1;
        // cout<<i<<" "<<i-d(i)<<endl;
    // }
//  
    // for(int i=0;i<300;i++){
        // if(!st[i]) cout<<i<<endl;
    // }
//  
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}