例题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。
先附上自己的想法,暴力枚举
由于每个n对应的x必然大于 n - 9*len(n);
所以将枚举范围缩小
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//优化范围,(枚举法)
int main(){int nn;int n;scanf("%d", &nn);while(nn--){scanf("%d", &n);int flag = 1;int tn = n, len = 0;while(tn){tn = tn / 10;len++;}for(int i = n - 9*len; i < n; i++){//只需枚举 n-9*len(n)~n-1的所有数字即可 int temp = i, sum = 0;for(int tcnt = 1; tcnt <= len; tcnt++){sum += (temp%10);temp/=10;}if(n == (i + sum)){printf("%d\n", i);flag = 0;break;}}if(flag)printf("0\n");}return 0;
}
然后再来试试打表法
//打表法
#include<stdio.h>
#include<string.h>
#define MAX 100005
int num[MAX];int main(){//打表预处理memset(num, 0, sizeof(num));for(int i = 1; i <= 100000; i++){int x = i;int sum = i;while(x){sum += (x%10);x /= 10;}if(!num[sum])num[sum] = i;}int T;int n;scanf("%d", &T);while(T--){scanf("%d", &n);printf("%d\n", num[n]);}return 0;
}
打表 0.020
枚举 0.040
还是打表香!
例题3-5 生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)相关推荐
- 寻找生成元问题解决(Digit Generator,ACM/ICPC Seoul 2005, UVa1583)
问题描述:如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1<=n<=10000),求最小生成元.无解时输出0.例如 n = 216,121,2005 时的解分别为198,0 ...
- 《算法竞赛入门经典》 例题3-5 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
原题及翻译 For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits ...
- 生成元(Digit Generator ,ACM/ICPC Seoul 2005 ,UVa 1583)
生成元:如果 x 加上 x 各个数字之和得到y,则说x是y的生成元. n(1<=n<=100000),求最小生成元,无解输出0. 例如:n=216 , 解是:198 198+1+9+8=2 ...
- 得分(Score,ACM/ICPC Seoul 2005,UVa1585)
给出一个由O和X组成的串(长度为1~80),统计得分.每个O的得分为目前连续出现的O的个数,X的得分为0.例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3. 输入样例 5 OO ...
- 例题 3-5 生成元 digit generator
1 #include<stdio.h> 2 #include<string.h> 3 #define maxn 100005 4 int ans[maxn]; //类似于 比较 ...
- 《算法竞赛入门经典》 例题 4-4 信息编码 (Message Decoding,ACM,ICPC World Finals 1991,UVa 213)
原题及翻译 Some message encoding schemes require that an encoded message be sent in two parts. 某些消息编码方案要求 ...
- 习题3-3 数数字(Digit Counting , ACM/ICPC Danang 2007, UVa1225)
前n(n≤10000)个整数顺次写在一起:123456789101112-数一数0-9各出现多少次 (输出10个整数,分别是0,1,-,9出现的次数). 原题链接:https://vjudge.net ...
- 例题3-6 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
长度为n的环状串有n种表示法,分别为从某 个位置开始顺时针得到.例如,图3-4的环状串 有10种表示: CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等.在这些表示法中,字典序最小的 ...
- 《算法竞赛入门经典》习题3-1 得分(Score,ACM、ICPC Seoul 2005,UVa1585)
原题及翻译 There is an objective test result such as "OOXXOXXOOO". 有一个客观的测试结果,比如"ooxxoxoo& ...
最新文章
- 品友互动入榜“AI First——2017-2018年中国人工智能先行企业榜TOP10”
- 十进制转任意进制-数论
- android adb移植到arm,android-ndk – 为arm处理器构建android adb
- 《剑指 Offer I》刷题笔记 41 ~ 50 题
- 【C语言】实现简易计算器
- 直觉模糊有计算机知识嘛,直觉模糊集理论及应用 上册
- Springboot接入阿里云物联网SDK实现控制网络继电器通断
- 微信小程序|基于小程序实现打卡功能
- halcon获取图像中心点_Halcon学习之六:获取Image图像中Region区域的特征参数
- Excel 删除一行的快捷键
- 关于Visual Studio 中“scanf”输入报错的解决方法
- 程序猿致富之路——(投资理财篇)
- 线阵相机的优势是什么?如何选择线阵相机?
- python绘图练习——股票分析(二):风险分析与蒙特卡罗模拟
- 案例3-1-1 构建旁挂二层组网隧道转发WLAN
- Rock pi E 初始化 + 安装 tensorflow
- 将一个不用的笔记本(ipad、甚至手机也可以【能访问浏览器就可以】)当做主机扩展的显示器(将任何设备转换为电脑的辅助屏幕)deskreen
- 练习:人人网注册页面
- 【PS】60套精选品牌VI样机PSD素材
- 【数据结构与算法学习笔记001】Kalman滤波