安徽大学计算机机试OJ练习

更新时间:2023-11-25 22:19:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、编程题

值日&&高精度加法

标签: 枚举

2017年11月26日 17:32:30 133人阅读 评论(0) 收藏 举报

分类: 编程题(72)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/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判断读入是否结束

程序输出说明

若存在满足题意的数字,先输出数字的个数k。 接下来k行,每行一个数字的值。 若不存在,直接输出0。 程序输入样例 可见格式 带空格和换行符的格式 带空格和换行符的格式说明 21 20 程序输出样例 Original Transformed 带空格和换行符的格式说明 1 15 0 提示 对于第一组数据,有一个数字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(\10. {

11. for(i=n-100,k=0;i

17. return 0; 18. }

19. int AS(int a){ 20. int sum=a; 21. while(a) 22. {

23. sum+=a;

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])。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。最后将C输出即可。

程序输入说明

输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。 程序输出说明 输出一行,表示a + b的值。 程序输入样例 可见格式 带空格和换行符的格式 带空格和换行符的格式说明 20100122201001221234567890 2010012220100122 程序输出样例 Original Transformed 带空格和换行符的格式说明 20100122203011233454668012 提示 无 题目来源 基础训练 也很简单 [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(\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(\28. printf(\29. return 0; 30. }

二、编程题

AHU ACM实验室11/13新生兴趣赛Round2 AOJ 180 E. A+B Problem (0 + EOL)

原创 2016年11月17日 08:53:42

? ? ? ?

标签: acm / AOJ 371

被这么一个输出搞到PE了八次我也是被自己的智商惊讶到了… TAT 所以以后要记住这种输出 每两个输出中间隔一个空行 最后一个输出只有一个换行符。

#include 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(\%d\\n\,a+b); }

return 0; }

三、编程题

AOJ 1302.值日

today 2017-11-27 14:40:30 visibility 58

点击显/隐题目

题解

对于一个数abcd,有a*1000+b*100+c*10+d 按照计算规则,有

a+b+c+d+a*1000+b*100+c*10+d

而a、b、c、d都是一位数,也即即使是最大的9位数99999999,其计算后也仅仅有999999999+9*9

因此对于每一组数据,直接枚举比他大100和比他小100的数,统计一下即可

代码

点击显/隐代码

#include #include #include

#include using namespace std;

const int maxn=10005; vector v; //int vis[maxn];

int d(int t){ int ans = t; while(t){

ans += t; 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(\,sz); for(int i=0;i

int main(){

//freopen(\ //memset(vis,0,sizeof(vis)); int n;

while(scanf(\,&n)!=EOF){ getans(n); }

return 0; }

模拟机试题

A. A+B问题

运行时间<1000 ms 单次测试运行时间限制: 1000 ms 内存限制:64 MB

总提交: 351次 通过: 236次

题目描述

本系统提交的所有代码的主函数必须以int作为返回类型,并且最后要有return 0;语句。并且不能输出和题目要求输出无关的附加信息! 计算a+b的和。

在本系统提交代码时,提交的格式如下: #include int main() {

int a,b;

scanf(\不符合要求的写法:scanf(\请输入a,b\; scanf(\这些写法或者输出多余信息,或者输入格式不符合题目要求

printf(\不符要求的写法:printf(\结果是:%d\这些写法输出了多余的信息。 return 0; }

因此,请严格按照题目的输入和输出要求进行编程,在本地机器上的IDE调试通过后才可以提交。

程序输入说明 输入一行,两个用空格分隔的整数a,b (0<=a,b<=10) 程序输出说明 输出一行,一个整数,为a+b的和 程序输入样例 可见格式 1 2 带空格和换行符的格式 带空格和换行符的格式说明 程序输出样例 Original 3 Transformed 带空格和换行符的格式说明 提示 本系统提交的所有代码的主函数必须以int作为返回类型,并且最后要有return 0;语句。并且不能输出和题目要求输出无关的附加信息! #include

int main() {

int a,b;

scanf(\ printf(\ return 0; }

C. 闰年判断

运行时间<1000 ms 单次测试运行时间限制: 1000 ms 内存限制: 2 MB

总提交: 361次 通过: 174次

题目描述 判断某一年是否是闰年. 在C语言中,求余操作用%,例如3%2的结果是1。选择结构的用法如下: if(条件) { 语句1; } else { 语句2; } 该结构的意思是:如果条件成立,则执行语句1,否则执行语句2。 条件表达式通常为a>b,a>=b, a==b(判断a是否等于b), a!=b(判断a是否不等于b). 程序输入说明 行1:一个表示年份的整数. 程序输出说明 行1:输出Y或者N,Y表示某年是闰年. 程序输入样例 可见格式 2000 带空格和换行符的格式 带空格和换行符的格式说明 程序输出样例 Original Y Transformed 带空格和换行符的格式说明 提示 无 #include

int main() {

int year; int flag;

scanf(\ if(year%4==0)

}

{

if(year0==0) {

if(year@0==0) {

flag = 1; } else {

flag = 0; } }

else {

flag = 1; } }

else {

flag = 0; }

if(flag) {

printf(\} else {

printf(\}

return 0;

D. 求分数和

运行时间<1000 ms 单次测试运行时间限制: 1000 ms 内存限制: 10 MB

总提交: 488次 通过: 152次

题目描述

求1-1/2+1/3+...-1/N. 求解该题时,需要先从键盘读入一个整数N,然后执行算法。本题用到的知识点如下: 1.在C语言中,实数通常用double类型表示,

例如double a; 则定义了一个变量a,里面可以存放一个实数。 2.在输出实数时,采用printf\形式输出,其中.5表示输出结果保留小数点后5位,lf是double类型的输出控制字符。 3.在C语言中,两个整数相除的结果是商,例如3/2=1;若想得到1.5这样的准确结果,可以把除数或者被除数写成带小数点的形式,例如3/2.0=1.5或者3.0/2=1.5; 4.在C语言中,直到型循环结构的语法格式如下: do { 语句1; 语句2; ...; //其他语句。 }while(条件); 其意思是:执行花括号里的语句序列直到while小括号里的条件不成立为止。 程序输入说明 行1:一个整数N 程序输出说明 行1:结果(一个浮点数,精确到小数点后5位) 程序输入样例 可见格式 2 带空格和换行符的格式 带空格和换行符的格式说明 程序输出样例 Original 0.5 Transformed 带空格和换行符的格式说明 提示 无 #include

int main() {

本文来源:https://www.bwwdw.com/article/xtkt.html

Top