ACM/ICPC2005生成性问题元问题

齐大ACM网站:
成员(1787)
齐大ACM竞赛队生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583) - CSDN博客
生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)
#include &stdio.h&
//求解各个位数字之和
int get_num_sum(int num)
int sum = 0 ;
while( num!=0)
sum += num%10 ;
num /=10 ;
int main(void)
freopen(&input.txt& , &r& , stdin);
freopen(&output.txt& , &w& , stdout);
scanf(&%d& , &n);
//开始遍历
for( i = 0 ; i & i++)
if( n == i+get_num_sum(i))
printf(&n的生成元:%d\n& , i);
printf(&0\n&);
& & 如果只是求一次解,那么上述解法可以很好的胜任这个工作。但是如果是求多组n的生成元,那个时间上可能就会超时。这个时候我们就应该想一些办法来解决时耗上的问题,根据计算机系统的Cache的相关知识,我们可以建立一个类似的缓存区(但是Cache的中文并不是缓存),就求得的中间结果放置在缓存区,下次再求某个数的生成元,直接查表即可。
#include &stdio.h&
#include &string.h&
#define MAX_NUM
int data[MAX_NUM+1];
//求解各个位数字之和
int get_num_sum(int num)
int sum = 0 ;
while( num!=0)
sum += num%10 ;
num /=10 ;
int main(void)
freopen(&input.txt& , &r& , stdin);
freopen(&output.txt& , &w& , stdout);
memset( data , 0 , sizeof(data));
scanf(&%d& , &n);
//开始遍历并放入缓存
for( i = 0 ; i &= MAX_NUM ; i++)
int ans = i+get_num_sum(i);
//是求最小生成元,所以如果某个数已经存在生成元那个数就是最小生成元
if( ans &= MAX_NUM && data[ans]==0 )
data[ans] =
printf(&%d\n& , data[n]);
本文已收录于以下专栏:
相关文章推荐
这题还是比较简单的,然而更加觉得自己真心蒟蒻,可以在保存时就只保存最小的,然而我是保存了所有的,在输出时才比较。
For a positive integer N, the digit-sum of N is
defined as the sum of N itself and its digits. When...
For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits. When...
For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits. When...
https://uva.onlinejudge.org/external/15/1583.pdfFor a positive integer N , the digit-sum of N is def...
题意 如果a加上a所有数位上的数等于b时 a称为b的generator  求给定数的最小generator 
给的数n是小于100,000的  考虑到所有数位和最大的数99,999的数位和也...
For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits.
Digit Generator
Time Limit:3000MS
Memory Limit:Unknown
64bit IO Format: %lld & %llu...
Description
Download as PDF
For a positive integer N , the digit-sum of N is defined as the sum of...
For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits. When...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
标签:至少1个,最多5个
生成元(Digit Generator, AMC/ICPC Seoul 2005, UVa1583)
标签(空格分隔): c
如果 x 加上 x 的各个数字之和得到的 y,就说 x 是 y 的生成元。给出 n (1 &= n &= 100000),求最小生成元。无解输出 0。例如,n = 216,121,2005 时的解分别为 198,0,1979。
假设所求的生成元为 m。可以知道 m & n。尝试枚举所有的 m & n,取出是 n 的生成元,没有则为 0。
已知 198 是 216 的生成元,计算公式如下:
= 198 + 1 + 9 + 8
#include &stdio.h&
#include &string.h&
#define maxn 100005
int ans[maxn];
int main() {
memset(ans, 0, sizeof(ans));
for (int m = 0; m & 217; m++) {
int x = m, y =
while (x & 0) {
y += x % 10;
printf("x = %d, y = %d\n", x, y);
if (ans[y] == 0 || m & ans[y]) {
printf("ans[y] = %d\n", ans[y]);
scanf("%d", &T);
while(T--) {
scanf("%d", &n);
printf("%d\n", ans[n]);
#include &stdio.h&
int main() {
int i = 0,
scanf("%d", &n);
if (n &= 1 && n &= 100000) {
for (;;) {
if (i == 100001) {
printf("%d\n", 0);
int x = i, y =
while (x & 0) {
y += x % 10;
if (y == n) {
printf("%d\n", i);
0 收藏&&|&&0
你可能感兴趣的文章
1 收藏,1.4k
1 收藏,1.1k
分享到微博?
我要该,理由是:ACM 杭电ACM 2056 :Rectangles (求相交矩形的面积) - 为程序员服务
为程序员服务
杭电ACM 2056 :Rectangles (求相交矩形的面积)
转自:.cn/s/blog_714d1bhi.html
#include&iostream&
#include&cmath&
#include&algorithm&
int main()
double x1,y1,x2,y2,x3,y3,x4,y4;
double x[4],y[4];
double s,l,h;
while(cin&&x1&&y1&&x2&&y2&&x3&&y3&&x4&&y4)
x[0]=x1;x[1]=x2;x[2]=x3;x[3]=x4;
y[0]=y1;y[1]=y2;y[2]=y3;y[3]=y4;
sort(x,x+4);
sort(y,y+4);
l=fabs(x2-x1)+fabs(x4-x3)-(x[3]-x[0]);
h=fabs(y2-y1)+fabs(y4-y3)-(y[3]-y[0]);
if(l&=0 || h&=0)s=0.00;
printf(&%.2lf\n&,s);
您可能的代码
相关聚客文章
荣誉:1510
相关专栏文章欢迎访问C语言网
比赛栏每月有奖月赛!举办比赛联系QQ:问题反馈、粉丝交流
蓝桥杯训练群:
申请群时请备注排名里的昵称C语言研究中心 为您提供有图、有料、解渴的C语言专题! 欢迎讨论!
在介绍训练场的OJ系统之前,首先为大家介绍一下ACM:
ACM原代表美国计算机协会,因其举办的ICPC即国际大学生程序设计竞赛而闻名全世界,此项赛事要求学生的在五小时内解决全英文问题,并在效率和速度以及代码的审查上要求非常严格以至近乎苛刻,被誉为是计算机界的“奥林匹克”。在大学中,因其含金量、认可度等非常之高,故而在大学生名企就业、保研、留学等方面都有着极大的帮助。ACM也因其独有的比赛趣味也在今天的高校中也得到了广泛的推广,许多大学生都为之着迷、甚至大学四年都为之献身。足以说明ACM的魅力所在。
ACM比赛中主要以OJ(即Online Judge)判题为主,用来在线检测程序的正确性。OJ采用后台黑箱测试,测试数据非常全面,涵盖各种特殊情况。并且在结果的比对上也不放过一个空格和回车,这就要求程序员要有非常严谨的思维。著名的OJ有POJ、HOJ、UVA等。
轻量级入门OJ
ACM训练平台:
在各大OJ的ACM比赛赛题上,往往都会给出问题的描述(Description)、问题的输入和输出要求,并会给出几组样例数据。所以选手要在完全理解的基础上至少通过了样例数据才再提交代码。
下面我们介绍几种常见的输入输出格式。
这种输入的典型题目就是A+B
此题只要求用户求A+B的和,但此类题目往往说明测试数据有多组。则默认是到文件(后台测试用例在文件里)末尾结束。我们则可以采用循环的方式不断接收测试用例,并且每接收一组输出一组(不必全部输入再全部输出,因为OJ只比对一次最后的结果)。
参考C代码:
#include&stdio.h&
int main()
while(scanf(“%d%d”,&a,&b)==2) //利用scanf的返回值
printf(“%d\n”,a+b);
依然是A+B,我们可以看一下这道题/oj/problem1086.html
依然是求A+B,但它的输入数据为:
此题相比第一道而言,会提前告诉你是几组数据,第一行的2就表示有两组数据。则此时我们可以考虑这样写:
#include&stdio.h&
int main()
scanf(&%d&,&n);
while(n--)
scanf(&%d%d&,&a,&b);
printf(&%d\n&,a+b);
继续是A+B,不同的是题目中说明,有多组数据,但是以A和B都为0时结束,则此时,就要做判断。不能依然输出0。
参考答案:
#include&stdio.h&
int main()
while(scanf(&%d%d&,&a,&b)==2)
if(a== 0 && b==0)
printf(&%d\n&,a+b);
题目描述:此类题目是求n个数的和,输入为先输入一个数组n,然后后面跟n个数字,求这n个数字的和。同样有多组数据,当n=0时结束。题目链接
样例输入:
5 1 2 3 4 5
样例输出:
参考写法:
#include&stdio.h&
int main()
while(scanf(&%d&,&n) && n)
while(n--)
scanf(&%d&,&temp);
printf(&%d\n&,sum);
常见的ACM的输入输出格式如这些。
多组数据可能还会用到EOF、NULL这些宏。比如scanf、getchar、gets的返回值。
万变不离其宗,有些题目可能是这些格式的组合,亦或者是个别情况的变种,比如输出格式要求的变化等等,就需要各位ACMer灵活多变了。
DJTU2012年退役Acmer
C语言网, 版权所有丨如未注明 , 均为原创丨本网站采用协议进行授权 , 转载请注明!

我要回帖

更多关于 ps cc 生成器出现问题 的文章

 

随机推荐