uva 1583 Digit Generator(Uva-1583)

题目不再写入了,vj:https://vjudge.net/problem/UVA-1583#author=0

主要讲的是找一个数的小于它的一个数,小于它的那个数每一位加起来再加上那个数就会等于原来的数。没有就是0.

这个题实际上感觉也直接暴力for就行。数最大是1e5.那么最多5个9那么就是45,直接用stringstream或者其他的方法进行分位然后寻找就行。

找到就break那么这个数就是最小的。

刘汝佳的做法是直接预处理一个数组然后根据数组找数,实在是感觉非常的高明,同时代码量也比较小。

代码:

#include <iostream>
using namespace std;
#define max 100010
int a[max];
main()
{
    for(int i=1;i<max;i++)
    {
        int x=i;int y=i;
        while(x) {y+=x%10;x/=10;}
        if(a[y]==0||i<a[y]) a[y]=i;
    }
    int p,b;
    cin>>p;
    while(p--)
    {
        cin>>b;
        cout<<a[b]<<endl;
    }
}

这种思想应该得注意!!!直接预处理。

原文地址:https://www.cnblogs.com/baccano-acmer/p/9736030.html

时间: 2024-10-11 12:18:48

uva 1583 Digit Generator(Uva-1583)的相关文章

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(数学)

 题意 如果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", &

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

例题3-5 Digit Generator UVA - 1583

我还想把它当成一道数学题做,但是发现代码实现太繁琐.直接搜索肯定会超时的,所以我要确定遍历的区间.区间的上界我找到了,但是我无法准确的确定区间下界.所以我觉得这个方法不靠谱,就看了题解. 题解用的预处理,先把所有十万以内的正整数都遍历一遍,得到离i最近的以i为最小生成元的数t.以t为下标,将i赋值给ans[t],继续遍历.如果接下来存在另一个i,为t的生成元,并且比原先的ans[t]更小,就ans[t]=i,否则不处理.最后直接输入一个数,输出答案数组中这个数的值即可. #include <bi

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 1225 Digit Counting --- 水题

UVa 1225 题目大意:把前n(n<=10000)个整数顺次写在一起,12345678910111213...,数一数0-9各出现多少字 解题思路:用一个cnt数组记录0-9这10个数字出现的次数,先将cnt初始化为0,接着让i从1枚举到n, 对每个i,处理以活的i的每一个位置上的数,并在相应的cnt下标上+1 最后输出cnt数组即可 /* UVa 1225 Digit Counting --- 水题 */ #include <cstdio> #include <cstring

UVa 10533 - Digit Primes

题目:输出给定区间中,本身是素数,并且这个数的各位之和也是素数的数(称为位素数)的个数. 分析:数论.首先利用筛法,求出1000000内的所有的素数:然后在利用生成的素数表, 判断每个数是不是各位之和也是素数:再后求出从0开始到任意区间中包含位素数数的个数: 最后输出两个区间之差就是区间中的位素数的个数. 说明:达标法计算,查询输出. #include <iostream> #include <cstdlib> #include <cstring> #include &