UVa 1583 Digit Generator(数学)



题意 如果a加上a所有数位上的数等于b时 a称为b的generator  求给定数的最小generator

给的数n是小于100,000的  考虑到所有数位和最大的数99,999的数位和也才45  因此我们只需要从n-45到n枚举就行了

#include<cstdio>
#include<cstring>
using namespace std;
int t, n, a, b, ans, l;
int main()
{
    scanf ("%d", &t);
    while (t--)
    {
        scanf ("%d", &n);
        ans = 0;
        for (int i = n-50; i < n; ++i)
        {
            a = b = i;
            while (b)
            {
                a += b % 10;
                b /= 10;
            }
            if (a + b == n)
            {
                ans = i;
                break;
            }
        }
        printf ("%d\n", ans);
    }
    return 0;
} 

For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits. When M is
the digitsum of N , we call N a generator of M .

For example, the digit-sum of 245 is 256 (= 245 + 2 + 4 + 5). Therefore, 245 is a generator of 256.

Not surprisingly, some numbers do not have any generators and some numbers have more than one generator. For example, the generators of 216 are 198 and 207.

You are to write a program to find the smallest generator of the given integer.

Input

Your program is to read from standard input. The input consists of T test cases. The number of test cases T is given in the first line of the input. Each test case takes one line
containing an integer N , 1N100,
000 .

Output

Your program is to write to standard output. Print exactly one line for each test case. The line is to contain a generator of N for each test case. If N has multiple generators,
print the smallest. If N does not have any generators, print 0.

The following shows sample input and output for three test cases.

Sample
Input

3
216
121
2005

Sample
Output

198
0
1979
时间: 2024-10-19 12:51:16

UVa 1583 Digit Generator(数学)的相关文章

UVa 1583 Digit Generator(数)

For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits. When M is the digitsum of N , we call N a generator of M . For example, the digit-sum of 245 is 256 (= 245 + 2 + 4 + 5). Therefore, 245 is a generator of 

UVa 1583 Digit Generator WA

#include<stdio.h> int main() { long int n,i,s=0; while(scanf("%d",&n)!=EOF) { int flag=0; for(i=n-46;i<=n;i++) { s=i%10+i/10%10+i/100%10+i/1000%10+i/10000%10; if(s+i==n) { flag=1; break; } } if(flag) printf("%ld\n",i); els

uva 1583 Digit Generator(Uva-1583)

题目不再写入了,vj:https://vjudge.net/problem/UVA-1583#author=0 主要讲的是找一个数的小于它的一个数,小于它的那个数每一位加起来再加上那个数就会等于原来的数.没有就是0. 这个题实际上感觉也直接暴力for就行.数最大是1e5.那么最多5个9那么就是45,直接用stringstream或者其他的方法进行分位然后寻找就行. 找到就break那么这个数就是最小的. 刘汝佳的做法是直接预处理一个数组然后根据数组找数,实在是感觉非常的高明,同时代码量也比较小.

UVa 1587 - Digit Generator

A+A的每一位的数字的和=B 问你每一个B对应 的最小的A 是多少 不然输出0: 1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 const int N=100005; 6 int ans[2*N],tmp,cnt,n,t; 7 void fuc(){ 8 memset(ans,0,sizeof(ans)); 9 for(int i=1;i&l

Problem 005——Digit Generator

1583 - Digit Generator For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits. When M is the digitsum of N , we call N a generator of M . For example, the digit-sum of 245 is 256 (= 245 + 2 + 4 + 5). Therefore,

uva 1583 B - Digit Generator (暴力)

B - Digit Generator Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description For a positive integer N<tex2html_verbatim_mark> , the digit-sum of N<tex2html_verbatim_mark> is defined as the sum of N&l

uva 10623 - Thinking Backward(数学)

题目链接:uva 10623 - Thinking Backward 题目大意:就是给出N,表示要将平面分解成N份,问有哪些可选则的方案,m表示椭圆.n表示圆形.p表示三角形的个数,m.n.p分别给定范围. 解题思路:本来这题一点思路都没有,但是在论坛上看到一个公式N=2+2m(m?1)+n(n?1)+4mn+3p(p?1)+6mp+6np 这样只要枚举m和p,求解n,判断n是否满足即可,注意n一定是整数. #include <cstdio> #include <cstring>

uva 11657 - Rational Billiard(数学)

题目链接:uva 11657 - Rational Billiard 题目大意:给定一个边界M,N,以及第一个球和第二个球的位置,第一个球以p,q的方向移动,碰到边界后被反弹,和光线的路线一致,问有没有可能集中第二个球. 解题思路:在网上参考别人的思路,首先将横纵坐标扩大相应倍数,保证p,q每移动一次对应在新平面为单位长度,然后只需要考虑横向移动所需要的步数,减掉纵向移动所需的步数后,剩余的步数是否满足周期的倍数即可.考虑四种请况.这题数据非常水,一开始坐标写错也过了. #include <cs

UVA 10668 - Expanding Rods(数学+二分)

UVA 10668 - Expanding Rods 题目链接 题意:给定一个铁棒,如图中加热会变成一段圆弧,长度为L′=(1+nc)l,问这时和原来位置的高度之差 思路:画一下图可以很容易推出公式,设圆弧扇形部弧度r,那么可以计算出铁棒长度为lr/sin(r)这个公式在[0, pi/2]是单调递增的,所以可以用二分法去求解 要注意的一点是最后答案计算过程中带入mid,之前是带入x(二分的左边值),可实际上x是可能等于0的,而带入mid,由于是double型,所以mid实际上表示是一个非常趋近0