[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等. 在这些表示法中,字典序最小 ...
随机推荐
- Python 分布式进程
#-*-coding:utf-8-*- '''分布式进程指的是将Process进程分不到多台机器上,充分利用多台机器的性能完成复杂的任务''' #服务器端 #--------------------- ...
- javascript之复习(框架里的方法们)
继上次整理,一些东西没有整理完.就写在这.可能比较乱比较杂,因为都是整理的一些东西,也没有到做成专题的程度. 1.String.repeat() 大家要实现重复一个字符串的重复怎么写呢,反正我的第一想 ...
- 面试篇——mysql
背景:在面试过程中发现很多公司对sql查询有要求,虽然不高,但是简单常见的sql查询必须熟练的掌握,否则一面都无法通过,痛定思痛,必须要深入了解下!!! 注释符号 面试题1 查询没有成绩的学生信息 参 ...
- win32: WM_PAINT 实现双缓冲缓图
相关参考资料: GDI下实现双缓冲 - http://jingyan.baidu.com/article/e73e26c0f8df2424acb6a76e.html <Win32_19>用 ...
- 跟我一起写一个hello-world react组件并发布到npm
第一步:初始化我们的配置 $ mkdir react-hello-world $ cd react-hello-world/ $ npm init -y 修改我们的package.json文件 //p ...
- 第一节,windows和ubuntu下深度学习theano环境搭建
先讲解windows下深度学习环境的搭建 步骤一 安装Anaconda Anaconda是一个用于科学计算的python发行版,支持linux,mac,windows系统,提供了包管理和环境管理的功 ...
- QT槽函数处理线程
今天用到QTcpSocket的时候,由于客户端发起请求在一个线程里,当readyRead的信号发出后接收的槽函数是否还会在该线程里处理? 现在看来其实是交给主线程处理的,那么我要实现在线程里处理怎么实 ...
- re-download dependencies and 无法下载jar 的解决
Re-download dependencies and sync project (requires network) 其实就是修改gradle 的path 路径:
- mysql体系结构和sql查询执行过程简析
一: mysql体系结构 1)Connectors 不同语言与 SQL 的交互 2)Management Serveices & Utilities 系统管理和控制工具 备份和恢复的安全性,复 ...
- 百度富文本ueditor使用小结
最近因工作需要使用了ueditor,根据自己的需求将开发使用时遇到的问题小结分享下. 1.可到官网根据自身情况下载最新版本,https://ueditor.baidu.com/website/ 2.h ...