一、编程题值日&&高精度加法标签:枚举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 copyprint?1.# include <stdio.h>2.# define N 1013.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<n;i++)12. if(AS(i)==n)A[k++]=i;13. printf("%d\n",k);14. for(i=0;i<k;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 copyprint?1.# include <stdio.h>2.# define N 1013.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所以以后要记住这种输出每两个输出中间隔一个空行最后一个输出只有一个换行符。
#include<stdio.h> int main(void){int a,b;scanf("%d %d ",&a,&b);printf ("%d \n",a+b);while (scanf("%d %d ",&a,&b)!=EOF){if (a==0&&b==0)break ;printf ("\n %d \n",a+b);}return 0;}三、编程题AOJ 1302.值日today 2017-11-27 14:40:30visibility 58点击显/隐题目题解对于一个数abcd,有按照计算规则,有而a、b、c、d都是一位数,也即即使是最大的9位数其计算后也仅仅有因此对于每一组数据,直接枚举比他大100和比他小100的数,统计一下即可代码点击显/隐代码#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int maxn=10005;vector<int> v;//int vis[maxn];int d(int t){int ans = t;while(t){ans += t%10;t/=10;}return ans;}void getans(int t){v.clear();for(int i=max(0,t-1000);i<=t+1000;++i){if(d(i)==t)v.push_back(i);}int sz = v.size();printf("%d\n",sz);for(int i=0;i<sz;++i)printf("%d\n",v[i]);}int main(){//freopen("in.txt","r",stdin);//memset(vis,0,sizeof(vis));int n;while(scanf("%d",&n)!=EOF){getans(n);}return0;}模拟机试题A. A+B问题运行时间<1000 ms 单次测试运行时间限制: 1000 ms 内存限制:64 MB总提交: 351次通过: 236次题目描述本系统提交的所有代码的主函数必须以int作为返回类型,并且最后要有return 0;语句。
并且不能输出和题目要求输出无关的附加信息!计算a+b的和。
在本系统提交代码时,提交的格式如下:#include<stdio.h>int main(){int a,b;scanf("%d%d",&a,&b); //不符合要求的写法:scanf("请输入a,b");scanf("%d,%d",&a,&b)这些写法或者输出多余信息,或者输入格式不符合题目要求printf("%d",a+b); //不符要求的写法:printf("结果是:%d",a+b); 这些写法输出了多余的信息。
return 0;}因此,请严格按照题目的输入和输出要求进行编程,在本地机器上的IDE调试通过后才可以提交。
提示本系统提交的所有代码的主函数必须以int作为返回类型,并且最后要有return 0;语句。
并且不能输出和题目要求输出无关的附加信息!#include <stdio.h>int main(){int a,b;scanf("%d%d",&a,&b);printf("%d",a+b);return 0;}C. 闰年判断运行时间<1000 ms 单次测试运行时间限制: 1000 ms 内存限制: 2 MB总提交: 361次通过: 174次提示无#include <stdio.h>int main(){int year;int flag;scanf("%d",&year);if(year%4==0){if(year%100==0){if(year%400==0){flag = 1;}else{flag = 0;}}else{flag = 1;}}else{flag = 0;}if(flag){printf("Y");}else{printf("N");}return 0;}D. 求分数和运行时间<1000 ms 单次测试运行时间限制: 1000 ms 内存限制:10 MB总提交: 488次通过: 152次题目描述求1-1/2+1/3+...-1/N. 求解该题时,需要先从键盘读入一个整数N,然后执行算法。