安徽大学计算机机试OJ练习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、编程题
值日&&高精度加法
标签:枚举
2017年11月26日17:32:30 133人阅读评论(0) 收藏举报分类:
编程题(72)
版权声明:本文为博主原创文章,未经博主允许不得转载。
https:///zhagoodwell/article/details/78638380
目录(?)[+] C. 值日
运行时间<1000 ms 单次测试运行时间限制: 1000 ms 内存限制:64 MB
总提交: 2次通过: 1次
题目描述
今天轮到pw值日了。值日可是一个体力活。Pw首先擦黑板,pw定睛一看黑板,嘿呀,怎么上边有一堆奇奇怪怪的数字。再一看,原来是今天留的一道数学题。赶巧数学老师进来了,pw急忙上前去请教。
老师说:“这不是AHU新生赛“值日的后续”那题吗?”,老师边讲边翻开课本,“给出一个正整数x,求得x和其各位9数字之和是多少?挺简单的吧?你是不是……”
然而今天题目没那么简单。现在已知一个数字和其各位数字之和为n,请求出有几个数字x,满足题目叙述的要求。如果存在这样的数字,请先输出这样数字的个数,再按照从小到大的顺序依次输出这些数字,否则输出0。
程序输入说明
一个数字n(1<=n<=10^9)
用EOF判断读入是否结束
提示
对于第一组数据,有一个数字15满足15+5+1=21。
对于第二组数据,找不到满足题意的的数字,故输出0。
个人理解这个只需要估算一下10^9如果每一位都是9 则最多就81 所以只要在n-100のn之间枚举即可
[objc]view plain copy
print?
1.# include
2.# define N 101
3.int AS(int a);
4.int A[N];
5.int i,k;
6.int main()
7.{
8. int i,n;
9. while(scanf("%d",&n)!=EOF)
10. {
11. for(i=n-100,k=0;i 12. if(AS(i)==n)A[k++]=i; 13. printf("%d\n",k); 14. for(i=0;i 15. printf("%d\n",A[i]); 16. } 17. return 0; 18.} 19.int AS(int a){ 20. int sum=a; 21. while(a) 22. { 23. sum+=a%10; 24. a/=10; 25. } 26. return sum; 27.} 高精度加法 运行时限: 1000 ms 单次运行时限: 1000 ms 内存限制: 64 MB 总提交: 78次通过: 27次 题目描述 输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。计算c = a + b 的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。最后将C输出即可。 [objc]view plain copy print? 1.# include 2.# define N 101 3.char A[N],B[N]; 4.int C[N+2]; 5.int main(){ 6. int a=-1,b=-1,c=-1,i,j; 7. //freopen("AAA.txt","r",stdin); 8. gets(A); 9. while(A[++a])A[a]-=48; 10. gets(B); 11. while(B[++b])B[b]-=48; 12. i=a+1;j=b+1; 13. do{ 14. i--;j--; 15. if(i&&j==-1)C[++c]+=A[i]; 16. else if(i==-1&&j)C[++c]+=B[j]; 17. else C[++c]+=A[i]+B[j]; 18. if(C[c]>9) 19. { 20. C[c+1]+=C[c]/10; 21. C[c]%=10; 22. } 23. if(i==-2)i=-1; 24. if(j==-2)j=-1; 25. }while(i>-1||j>-1); 26. while(!C[c])c--; 27. while(c)printf("%d",C[c--]); 28. printf("\n"); 29. return 0; 30.} 二、编程题 AHU ACM实验室11/13新生兴趣赛Round2 AOJ 180 E. A+B Problem (0 + EOL) 年11月17日08:53:42 •标签: •acm/ •AOJ •371 被这么一个输出搞到PE了八次我也是被自己的智商惊讶到了… TAT 所以以后要记住这种输出 每两个输出中间隔一个空行 最后一个输出只有一个换行符。