Digit Generator UVA - 1583】的更多相关文章

​ 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 题目大意:如果x加上x的各个数字之和得到y,那么称x是y的生成元. 给定数字n,求它的最小生成元 解题思路:可以利用打表的方法,提前计算出以i为生成元的数,设为d,并保存在a[d]中(a[d]=i),反复枚举,若是初次遇到或遇到更小的则更新 相关说明:本来按书上来,在更新数组a时,if里是有或上 i < a[y]这个条件的, 但观察到由于i是从小到大枚举的,因此只会更新一次,即第一次填进去的就是最小生成元,因此去掉仍然AC /* UVa 1583 Digit Generator…
题目链接:http://acm.tju.edu.cn/toj/showp2502.html2502.   Digit Generator Time Limit: 1.0 Seconds   Memory Limit: 65536K Total Runs: 2426   Accepted Runs: 1579 For a positive integer N, the digit-sum of N is defined as the sum of N itself and its digits.…
Question 例题3-5 最小生成元 (Digit Generator, ACM/ICPC Seoul 2005, UVa1583) 如果x+x的各个数字之和得到y,就是说x是y的生成元.给出n(1<=n<=100000), 求最小生成元.无解输出0.例如,n=216,121,2005时的解分别是198,0,1979. Think 方法一:假设所求生成元记为m,不难发现m<n.换句话说,只需枚举所有的m<n,看看有木有哪个数是n的生成元.此举效率不高,因为每次计算一个n的生成元…
题 题意 a加上 a的各位数=b,则b是a的digitSum,a是b的generator,现在给你digitSum,让你求它的最小的generator. 分析 一种方法是: 预处理打表,也就是把1到100000的digitSum求出来,对每个digitSum保存最小的generator. 另一种方法是: 对digitSum-45到digitSum-1的数求它的digitSum,最先算到给定的digitSum的就是最小的generator. 因为最多6位数,每位上的数最大是9,最多5个9,所以a的…
 题意 假设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", &…
生成元:如果 x 加上 x 各个数字之和得到y,则说x是y的生成元. n(1<=n<=100000),求最小生成元,无解输出0. 例如:n=216 , 解是:198 198+1+9+8=216 解题思路:打表 循环将从1到10005(大点也可以)进行提前写好. 例如: 1  1+1=2,-->  arr[2]=1 13 13+1+3=17,-->arr[17]=13 34  34+3+4=41, -->arr[41]=34 打完表后,直接将给的数作为下标,输出即可. #inc…
A+A的每一位的数字的和=B 问你每一个B对应 的最小的A 是多少 不然输出0: #include <cstdio> #include <iostream> #include <cstring> using namespace std; ; *N],tmp,cnt,n,t; void fuc(){ memset(ans,,sizeof(ans)); ;i<=N;i++){ tmp=i; cnt=; ){ cnt+=tmp%; tmp/=; } cnt+=i; )…
#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;int t, n, a, b, ans, l;int main(){ scanf("%d", &t);//这句话是为了确定一个最大的范围,比如说10000 while (t--) { scanf("%d", &n); ans = 0; for (int i = n - 50;…
1.题目大意 如果a加上a的各个数字之和得到b,则说a是b的生成元.给出n其中$1\le n\le 100000$,求其最小生成元,若没有解则输出0. 2.思路 使用打表的方法打出各个数字a对应的b,存入s[b]中. 3.应注意的问题 (1) 没有解时输出0,也就意味着在开始打表前要把数组s[maxn]清零.利用memset实现,要加入string.h的头文件,而memset对数组操作时只能初始化为0或-1. (2) 要求求出的是最小生成元,也就意味着在存入s[b]之前要有所比较. 4.代码 #…
题目不再写入了,vj:https://vjudge.net/problem/UVA-1583#author=0 主要讲的是找一个数的小于它的一个数,小于它的那个数每一位加起来再加上那个数就会等于原来的数.没有就是0. 这个题实际上感觉也直接暴力for就行.数最大是1e5.那么最多5个9那么就是45,直接用stringstream或者其他的方法进行分位然后寻找就行. 找到就break那么这个数就是最小的. 刘汝佳的做法是直接预处理一个数组然后根据数组找数,实在是感觉非常的高明,同时代码量也比较小.…
#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…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] for (int i = 1;i <= n;i++) { 算出i是哪一个的生成元. 假设是y. 则ans[y] = min(ans[y],i); } [错的次数] 在这里输入错的次数 [反思] 在这里输入反思 [代码] #include <bits/stdc++.h> using namespace std; const int N = 1e5; int ans[N + 10]; int main() { for (in…
#include <stdio.h> int main(){    int T, N, i, k, digitsum, generator;    scanf("%d", &T);    while (--T >= 0)    {        scanf("%d", &N);        for (i = 45; i > 0; --i)        {            generator = N - i;     …
​ Trung is bored with his mathematics homeworks. He takes a piece of chalk and starts writing a sequence of consecutive integers starting with 1 to N (1 < N < 10000). After that, he counts the number of times each digit (0 to 9) appears in the seque…
枚举1~100000把所有数的最小generators记录下来,直接查表即可. AC代码: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=100000+50; int ans[maxn]; int get(int a){ int b=a; while(b>0){ a+=b%10; b/=10; } return a; } void…
#include<stdio.h> #include<string.h> #define maxn 100005 int ans[maxn]; //类似于 比较大的数组还是开导外面比较好一点,防止报错. int main() { int x,y,m,T,n; memset(ans,,sizeof(ans)); //数组归零. ;m<maxn;m++) //从 1 开始 遍历到 maxn. { x=y=m; // 将 x和y 都赋值为 m. ) //x代表这 一个个的位数. {…
如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1≤n≤100000),求最小 生成元.无解输出0.例如,n=216,121,2005时的解分别为198,0,1979. [分析] 本题看起来是个数学题,实则不然.假设所求生成元为m.不难发现m<n.换句话说,只需枚举所有的m<nn,看看有没有哪个数是n的生成元. 可惜这样做的效率并不高,因为每次计算一个n的生成元都需要枚举n-1个数.有没有更快的方法?聪明的读者也许已经想到了:只需一次性枚举100000内的所有正整数m,标记“m加…
题目链接:https://vjudge.net/problem/UVA-1583 题意:给出一个数N,判断最小的数x使x+(x各位数字的和)=N 题解:这是一个暴力求解题,不过有技巧,x各位数字的和最多是9*位数,所以循环从N-位数*9开始循环即可 ac代码: #include<iostream>#include<cstdio>using namespace std;int main(){    int n,m,k,ans;    cin>>n;    for(int…
How to generate a sample from $p(x)$? Let's first see how Matlab samples from a $p(x)$. In Matlab, there are several common probability distributions. Try univariate Gaussian distribution p= normpdf(linspace(xmin , xmax , num_of_points) , mean, stand…
第1章 从随机变量采样 研究者提出的概率模型对于分析方法来说通常比较复杂,研究者处理复杂概率模型时越来越依赖计算.数值方法,通过使用计算方法,研究者就不用对一些分析技术做一些不现实的假设(如正态性和独立性). 大多数近似技术的关键是能够从分布中采样.需要采样来预测一个特别的模型在一些情景下是什么样的,找到在实验数据上应用模型的隐变量(参数)的合适值.大部分计算采样方法把从复杂分布采样的问题转化为简单采样分布的子问题.本章我们将介绍两种采样方法:逆变换方法和拒绝采样.这些方法适用于大多数单变量单值…
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 1358 - Generator option=com_onlinejudge&Itemid=8&page=show_problem&category=524&problem=4104&mosmsg=Submission+received+with+ID+14082913" target="_blank" style="">题目链接 题意:有m种字符(从'A'開始往后数的大写字母),如今有一个字符串,长…
Uniform Generator  Computer simulations often require random numbers. One way to generate pseudo-random numbers is via a function of the form where ``  " is the modulus operator. Such a function will generate pseudo-random numbers (seed) between 0 an…
Description  Problem B.Last Digit  Background Give you a integer number N (1<=n<=2*10100). Pleasecompute S=11+22+33+-+NN   Give the last digit of S to me. Input Input file consists of several Ns, each N a line. It is ended with N=0. Output For each…
思路: 利用java 特性,将数字从1 一直加到n,全部放到String中,然后依次对strring扫描每一位,使其carr[str.charAt(i)-'0']++; 最后输出carr[i],即可. 13 string=12345678910111213 carr[1]++.carr[2]++.carr[3]++....carr[1]++.carr[1]++.carr[1]++.carr[2]++.carr[1]++.carr[3]++ AC Code: import java.util.Sc…
题意:给出n,将前n个整数顺次写在一起,统计各个数字出现的次数. 用的最笨的办法--直接统计-- 后来发现网上的题解有先打表来做的 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ]; ]; int main() { int ncase,n,i; scanf("%d",&ncase); wh…
题意:根据这个式子来递推求得每个随机数x,step和mod给定,seed(0)=0.如果推出来的序列是mod个不重复的数字(0~mod-1)则打印good,否则bad(因为不能产生所有的数). 思路: 用一个数组记录所产生过的数,当出现数字已记录过时,判断是否个数为mod个.若是就返回good. #include <bits/stdc++.h> #define LL long long using namespace std; ; bool ans[N]; int main() { //fre…
#include <cstdio> #define ll long long const ll MOD = 1e9; int main() { ll N, M; while(scanf("%lld%lld", &N, &M) != EOF) { ll ans = ; while(M--) { ans *= N--; )) ans /= ; ans %= MOD; } printf(); } ; }…
题目:输出给定区间中,本身是素数,而且这个数的各位之和也是素数的数(称为位素数)的个数. 分析:数论.首先利用筛法,求出1000000内的全部的素数:然后在利用生成的素数表, 推断每一个数是不是各位之和也是素数:再后求出从0開始到随意区间中包括位素数数的个数: 最后输出两个区间之差就是区间中的位素数的个数. 说明:达标法计算,查询输出. #include <iostream> #include <cstdlib> #include <cstring> #include…