[C++]最小生成元 (Digit Generator, ACM/ICPC Seoul 2005, UVa1583)
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的生成元都需要枚举n-1个数。
方法二:一次性枚举100000内的所有正整数到数组中,最后查表即可。
Code
/*
最小生成元 (Digit Generator, ACM/ICPC Seoul 2005, UVa1583) 如果x+x的各个数字之和得到y,就是说x是y的生成元。给出n(1<=n<=100000),
求最小生成元。无解输出0.例如,n=216,121,2005时的解分别是198,0,1979.
*/
#include<iostream>
#include<string.h>
using namespace std; #define UPPERLIMIT 100000 const int maxn = 100001;
int answer[maxn]; void print(){
for(int i=0;i<maxn;i++)
printf("%d\n", answer[i]);
printf("\n");
} int main(){
memset(answer, 0, sizeof(answer));//初始化为所有y元素都没有最小生成元(:置零)
int x,tmp,n,item,sum;//sum即y
for(x=1;x<=UPPERLIMIT;x++){
tmp = x;
sum = 0;
sum += x;//加上x本身
while(tmp>0){
sum += tmp%10;
tmp /= 10;
}
//printf("x:%d,sum:%d\n", x, sum);//test
if(sum<=UPPERLIMIT){
if(x<answer[sum] || answer[sum] == 0){//赋二者的最小值
answer[sum] = x;
}
}
// printf("[%d]\n", x);//test
}
//print(); //test
scanf("%d", &n);
while(n--){
scanf("%d", &item);//y
printf("[%d \'s Min Generate Unit] %d\n", item, answer[item]);
}
return 0;
}
/*
测试数据
3
216
121
2005 198
0
1979.
*/
[C++]最小生成元 (Digit Generator, ACM/ICPC Seoul 2005, UVa1583)的更多相关文章
- 生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)
如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1≤n≤100000),求最小 生成元.无解输出0.例如,n=216,121,2005时的解分别为198,0,1979. [分析] 本题看 ...
- 生成元(Digit Generator,ACM/ICPC Seoul 2005,UVa 1583)
#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;int t, n, a, ...
- 分子量 (Molar Mass,ACM/ICPC Seoul 2005,UVa1586)
习题 3-3 分子量 (Molar Mass,ACM/ICPC Seoul 2005,UVa1586) 给出一种物质的分子式(不带括号),求分子量.本题中的分子式只包含4种原子,分别为C,H,O,N, ...
- 生成元(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,UVa 1585)
#include<stdio.h> int main(void) { char b; int t,cou,sum; scanf("%d",&t); getcha ...
- 得分(Score, ACM/ICPC Seoul 2005,UVa 1585)
#include<cstdio>#include<cstdlib>#include<cstring>int main(){ char s[80];//输入OOXXO ...
- UVa 1585 - Score - ACM/ICPC Seoul 2005 解题报告 - C语言
1.题目大意 给出一个由O和X组成的字符串(长度为80以内),每个O的得分为目前连续出现的O的数量,X得分为0,统计得分. 2.思路 实在说不出了,这题没过脑AC的.直接贴代码吧.=_= 3.代码 # ...
- [C++]环状序列(CircularSequence,ACM/ICPC Seoul 2004,UVa1584)
Question 例题3-5 环状序列(CircularSequence,ACM/ICPC Seoul 2004,UVa1584) 长度为n的环状串有n种表示方法,分别为从某个位置开始顺时针得到,在这 ...
- 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
长度为n的环状串有n种表示法,分别为从某 个位置开始顺时针得到.例如,图3-4的环状串 有10种表示: CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等. 在这些表示法中,字典序最小 ...
随机推荐
- Linux下设置VSCode为默认的文本编辑器
解决方法 执行一下命令 xdg xdg-mime default code.desktop text/plain Debian alternatives system sudo update-alte ...
- A1142. Maximal Clique
A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...
- linux系统调用之进程控制
1 进程控制: fork 创建一 ...
- c#反射(2)
public void Test1() { string ClassName="Person"; string MethodName="Test1"; //得到 ...
- Tomcat第一个站点介绍
背景 在讨论如何组织源码目录之前,很有必要对现有web站点的组织结构进行测试,特别是2.2版本的API,在服务器版本上是不同的,所以在2.2之后的版本中,所有的服务器版本都要求能够使用标准的压缩web ...
- Luogu P3975 [TJOI2015]弦论
题目链接 \(Click\) \(Here\) 题目大意: 重复子串不算的第\(k\)大子串 重复子串计入的第\(k\)大子串 写法:后缀自动机. 和\(OI\) \(Wiki\)上介绍的写法不太一样 ...
- POE 供电
受电设备(PD)和供电设备(PSE) 标准的五类网线有四对双绞线但是在10M BASE-T和100M BASE-T中只用到其中的两对.IEEE80 2.3af允许两种用法: 1.应用空闲脚供电时4.5 ...
- Zookeeper 集群安装配置
今天,栈长分享下 Zookeeper 的集群安装及配置. 下载 下载地址:http://zookeeper.apache.org/ 下载过程就不说了,我们下载了最新的zookeeper-3.4.11. ...
- Hbase准生产配置
hbase-site.xml <?xml version="1.0"?><?xml-stylesheet type="text/xsl" hr ...
- Spring Boot笔记二:快速创建以及yml文件自动注入
上个笔记写了如何自己去创建Spring boot,以及如何去打jar包,其实,还是有些麻烦的,我们还自己新建了几个文件夹不是. Idea可以让我们快速的去创建Spring boot应用,来看 一.快速 ...