关键词不能为空

当前您在: 主页 > 英语 >

蓝桥杯ACM决赛经典试题及其详解

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-03 12:43
tags:

-

2021年3月3日发(作者:蹩脚英语)


/*



入门训练



A+B


问题




问题描述



输入


A



B


,输出


A+B




说明:在“问题描述”这 部分,会给出试题的意思,以及所要求的目标。



输入格式



输入的第一行包括两个整数 ,由空格分隔,分别表示


A



B




说明:“输入格式”是描述在测试你的程 序时,所给的输入一定满足的格式。




做题时你应该假设所给的输入是一定满足输入格式的要求的,


所以你不需要对输入的格 式进


行检查。多余的格式检查可能会适得其反,使用你的程序错误。



在测试的时候,


系统会自动将 输入数据输入到你的程序中,你不能给任何提示。比如,


你在


输 入的时候提示“请输入


A



B


”之类的话是不需要的,这些多余的输出会使得你的程序被


判定为错误。




输出格式



输出一行,包括一个整数,表示


A+B


的值。



说明:“输出格式”是要求你的程序在输出结果的时候 必须满足的格式。




在输出时,


你的程序必须满足这个格式的要求,不能少任何内容,


也不能多任何 内容。


如果


你的内容和输出格式要求的不一样,


你的程序会被判断为错误,


包括你输出了提示信息、



间调试信息、计时或者统计的信息等。




样例输入



12 45



说明:“样例输入”给出 了一组满足“输入格式”要求的输入的例子。




这里给出的输入只是可能用来测试你的程序的一个输入,


在测试的时候,


还会有更多的输入


用来测试你的程序。




样例输出



57



说明:“样例输出”给出了一组 满足“输出格式”要求的输出的例子。



样例输出中的结果是和样例输入中的是对应的,


因此,


你可 以使用样例的输入输出简单的检


查你的程序。




要特别指出的是,


能够通过样例输入 输出的程序并不一定是正确的程序,


在测试的时候,



用很多组数据进行测试,


而不局限于样例数据。


有可能一个程序通过了样例数据,


但测试的


时候仍只能得


0


分,可能因为这个程序只在一些类似样例的特例中正确,而不具有通 用性,


再测试更多数据时会出现错误。




比如,对于本题,如果你写一个程序不管输入是什么都输入< /p>


57


,则样例数据是对的,但是


测试其他 数据,


哪怕输入是


1



2



这个程序也输出


57



则对于其他数据这个程序都不正确。




数据规模与约定



-


10000 <= A, B <= 10000




说明:“数据规模与约定”中给出了试题中主要参数的范围。




这个范围对于解题非常重要,


不同的 数据范围会导致试题需要使用不同的解法来解决。


比如


本题中给 的


A



B


范围 不大,可以使用整型


(int)


来保存,如果范围更大,超过< /p>


int


的范围,则


要考虑其他方法来保存 大数。




有一些范围在方便的时候是 在“问题描述”中直接给的,所以在做题时不仅要看这个范围,


还要注意问题描述。



*/



#include





int main()



{







int A, B;












scanf(







printf(












return 0;



}




/*



//


参 考代码


Java



import edReader;



import ption;



import treamReader;




class Main



{







public static void main(String[] args) throws IOException







{











args = new BufferedReader(new InputStreamReader()).readLine().split(











n(nt(args[0])+nt(args[1]));







}



}



*/




2




/*



入门训练



Fibonacci


数列




问题描述



Fibonacci


数列的递推公式为:


Fn=Fn

< p>
-


1+Fn


-


2


,其中


F1=F2=1






n


比 较大时,


Fn


也非常大,现在我们想知道,

Fn


除以


10007


的余数是多少 。




输入格式



输入包含一个整数


n




输出格式



输出一行,包含一个整数, 表示


Fn


除以


10007


的余数。



说明:在本题中,答案是要求

< p>
Fn


除以


10007


的余 数,因此我们只要能算出这个余数即可,


而不需要先计算出


Fn


的准确值,再将计算的结果除以


10007

取余数,直接计算余数往往比


先算出原数再取余简单。




样例输入



10



样例输出



55



样例输入



22



样例输出



7704



数据规模与约定



1 <= n <= 1,000,000




*/



#include



main()



{







unsigned long s=0,f1=1,f2=1,f3=1,n=0;







scanf(












if(n>2)







for(s=3;s<=n;s++)







{











f3=(f2+f1)%10007;











f1=f2;











f2=f3;







}








printf(







return 0;



}




/*



//


参 考代码


C


语言



#include



#include



#define MOD 10007



#define MAXN 1000001



int n, i, F[MAXN];



int main()



{







scanf(







F[1] = 1;







F[2] = 1;







for (i = 3; i <= n; ++i)











F[i] = (F[i


-


1] + F[i


-


2]) % MOD;







printf(







return 0;



}





//


参考代码


Java

语言



import edReader;



import ption;



import treamReader;



public class Main {







public static void main(String[] args) throws IOException{











BufferedReader reader=new BufferedReader(new InputStreamReader());











String s=ne();











int n=f(s);











int f1=1,f2=1,f3=0;











if(n<3){















(















return;}











for(int i=3;i<=n;i++)











{if(f1>10007)f1=f1%10007;











if(f2>10007)f2=f2%10007;











f3=f1+f2;











f1=f2;











f2=f3;











}











(f3%10007);











}












}



*/




3




/*



入门训练



序列求和




问题描述




1+2+3+...+n


的值。



输入格式



输入包括一个整数


n




输出格式



输出一行,包括一个整数, 表示


1+2+3+...+n


的值。



样例输入



4



样例输出



10



样例输入



100



说明:有一些试题会给出多组 样例输入输出以帮助你更好的做题。




一般在提交之前所有这些样例都需要测试通过才行,


但这不代表这几组样例数据都正确 了你


的程序就是完全正确的,潜在的错误可能仍然导致你的得分较低。

< br>



样例输出



5050



数据规模与约定



1 <= n <= 1,000,000,000




说明:请注意这里的数据规模。



< /p>


本题直接的想法是直接使用一个循环来累加,然而,当数据规模很大时,这种“暴力”的方


法往往会导致超时。此时你需要想想其他方法。你可以试一试,如果使用


1000000000


作为


你的程序的输入,你的程序 是不是能在规定的上面规定的时限内运行出来。



< p>
本题另一个要值得注意的地方是答案的大小不在你的语言默认的整型


(in t)


范围内,


如果使用


整型来保存结果 ,会导致结果错误。




如果你使用< /p>


C++



C


语言 而且准备使用


printf


输出结果,则你的格式字符串应该写 成


%I64d


以输出


long long


类型的整数。



*/



#include



main()



{







long long n,s=0;












scanf(












if(n%2==0)







s=(1+n)*n/2;







else







s=(1+n)*n/2+n/2;







printf(












return 0;



}




/*



//


参 考代码


C


语言



#include



int main()



{







int n;







long long ret = 0, tmp;







scanf(







tmp = n;







printf(







return 0;



}




//< /p>


参考代码


Java


语言

< br>


import edReader;



import ption;



import treamReader;



public class Main {







public static void main(String args[]) throws NumberFormatException, IOException{











BufferedReader strin = new BufferedReader(new InputStreamReader());











long i = nt(ne());











long sum = (1+i)*i/2;











n(sum);







}



}



*/




4




/*



入门训练



圆的面积




问题描述



给定圆的半径


r


,求圆的面积。



输入格式



输入包含一个整数


r


,表示圆的半径。



输出格式



输出一行,包含一个实数, 四舍五入保留小数点后


7


位,表示圆的面积。

< br>


说明:在本题中,输入是一个整数,但是输出是一个实数。




对于实数输出的问题,请一定看清楚实数输出的要求,比如本 题中要求保留小数点后


7


位,


则你的程 序必须严格的输出


7


位小数,


输出过多 或者过少的小数位数都是不行的,


都会被认


为错误。

< p>



实数输出的问题如果没有特别说明,舍入都是按四舍五入进行。




样例输入



4



样例输出



50.2654825



数据规模与约定



1 <= r <= 10000




提示



本题对精度要求较高,请注意π 的值应该取较精确的值。你可以使用常量来表示π,比如


PI=3.979323


,也可以使用数学公式来求π,比如


PI=atan(1.0)*4< /p>




*/



#include



#include



#define PI atan(1.0)*4




main()



{







int r=0;







double s=0;







scanf(












s=PI*r*r;







printf(












return 0;



}





/*



//


参 考代码


C


语言



#include



#include




int main()



{







int r;







double s, PI;







scanf(







PI = atan(1.0) * 4;







s = PI * r * r;







printf(







return 0;



}





//


参考代码


Java

语言



import edReader;



import ption;



import treamReader;



import imal;











70 71





public class Main {









public static void main(String[] args) throws IOException {











// TODO Auto


-


generated method stub















BufferedReader bf = new BufferedReader(new InputStreamReader());















BigDecimal



bg = new BigDecimal(ne());















BigDecimal


value


=


ly(ly(new


BigDe cimal())).setScale(7,_HALF_UP);















n(value);







}



}



*/




5




/*



基础练习



闰年判断




问题描述



给定一个年份,判断这一年是不是闰年。




当以下情况之一满足时,这一年是闰年:




1.


年份是


4


的倍数而不是


100


的倍数;




2.


年份是


400


的倍数。




其他的年份都不是闰年。




输入格式



输入包含一个整数


y


,表示当前的年份。



输出格式



输出一行,如果给定的 年份是闰年,则输出


yes


,否则输出


no




说明:当试题指定你输出一个 字符串作为结果(比如本题的


yes


或者


no


,你需要严格按照


试题中给定的大小写,写错大小写将不 得分。




样例输入



2013



样例输出



no



样例输入



2016



样例输出



yes



数据规模与约定



1990 <= y <= 2050




*/



#include



main()



{







int y;







scanf(








if(y%4==0&&y%100!=0||y%400= =0)











printf(







else











printf(
















return 0;



}




6




/*



基础练习



01


字串




问题描述



对于长度为


5


位的一个


01


串,


每一位都可能是


0



1



一共有


32


种可能。


它们的前几个是:




00000




00001




00010




00011




00100




请按从小到大的顺序输出这


32



0 1


串。




输入格式



本试题没有输入。



输出格式



输出


32


行,按从小到大的顺序每行一个长度为


5



01


串。



样例输出



00000



00001



00010



00011



<


以下部分省略


>



*/



#include



main()



{







int a,b,c,d,e;












for(e=0;e<=1;e++)







for(d=0;d<=1;d++)







for(c=0;c<=1;c++)







for(b=0;b<=1;b++)







for(a=0;a<=1;a++)







printf(












return 0;



}




7




/*



基础练习



字母图形




问题描述



利用字母可以组成一些美丽的图形,下面给出了一个例子:




ABCDEFG




BABCDEF




CBABCDE




DCBABCD




EDCBABC




这是一个


5



7


列的图形,请找出这个图形的规律,并输出一个

< p>
n



m


列的图形。




输入格式



输入一行,包含两个整数


n



m


,分别表示你要输出的图形的行数的列数。



输出格式



输出


n


行,每个


m


个字符,为你的图形。



样例输入



5 7



样例输出



ABCDEFG



BABCDEF



CBABCDE



DCBABCD



EDCBABC



数据规模与约定



1 <= n, m <= 26




*/



#include



#include




main()



{







int n,m,j,k;







scanf(







if(n>=1&&m<=26)







for(j=0;j







{











for(k=0;k











pri ntf(


-


k));











printf(







}







return 0;



}



/*



#include



#include



#define MAXSIZE 26




//


输出



void Print(char matrix[MAXSIZE][MAXSIZE],int n,int m)



{







int i,j;







for(i=0;i







{











for(j=0;j











{















printf(











}











printf(







}



}




//


实现字母图形



void Drawing(int n,int m)



{







int i,j;







int point=0;







char str;







char matrix[MAXSIZE][MAXSIZE];







for(i=0;i







{











str='A';











for(j=i;j











{















matrix[i][j]=str++;











}











str='A';











for (j=i


-


1;j>=0;j


--


)











{















matrix[i][j]=++str;











}







}







Print(matrix,n,m);



}



int main()



{







int n,m;







scanf(







Drawing(n,m);







return 0;



}



*/




8




/*



基础练习



数列特征




问题描述



给出


n


个数,找出这


n


个数的最大值,最 小值,和。




输入格式



第一行为整数


n


,表示数的个数。



< /p>


第二行有


n


个数,为给定的


n


个数,每个数的绝对值都小于


10000





输出格式



输出三行,每行一个整数。 第一行表示这些数中的最大值,第二行表示这些数中的最小值,


第三行表示这些数的和。



样例输入



5



1 3


-


2 4 5



样例输出



5



-


2



11



数据规模与约定



1 <= n <= 10000




*/



#include



#define MaxSize 10000




main()



{







int n;







int sum=0,min=MaxSize,max=< /p>


-


MaxSize;












scanf(







while(n


--


)






{











int temp,st;











scanf(




















if(temp>max)











{















max=temp;











}











if(temp











{















min=temp;











}











sum+=temp;







}







printf(












return 0;



}




9




/*



基础练习



查找整数




问题描述



给出一个包含


n


个整数的数列,问整数


a


在数列中的第一次出现是第几个。




输入格式



第一行包含一个整数


n




< p>
第二行包含


n


个非负整数,为给定的数列,数列中 的每个数都不大于


10000





第三行包含一个整数


a


,为待查找的数。




输出格式



如果


a


在数列中出现了,输出它第一次出现的位置


(


位置从


1


开始编号


)


,否则输出


-


1


。< /p>



样例输入



6



1 9 4 8 3 9



9



样例输出



2



数据规模与约定



1 <= n <= 1000




*/



#include



#define MaxSize 1000+5




main()



{







int n,i,a[MaxSize],s,m=0;







scanf(








for(i=0;i







{











scanf(







}












scanf(







for(i=0;i







{











if(s==a[i])











{















printf(















return 0;











}







}












printf(


-

< br>1n








return 0;






}




10




/*



基础练习



回文数




问题描述





1221


是一个非常特殊的数,它从左边读和从右边读是一样的 ,编程求所有这样的四位


十进制数。



输出格式





按从小到大的顺序输出满足条件的四位十进制数。



*/



#include



main()



{







int a,b,i;







for(a=1;a<=9;a++)







for(b=0;b<=9;b++)







{











printf(







}







return 0;



}




/*



#include



int main()



{




int a,b,c,d,i;




for(i=1000;i<=9999;i++)




{







a=i/1000;






b=i/100%10;






c=i/10%10;






d=i%10;





if(a==d&&b==c)







printf(




}



return 0;



}



*/




11




/*



基础练习



特殊回文数




问题描述





123321


是一个非常特殊的数,它从左边读和从右边读是一 样的。





输入一个正整数


n




编程求所有这样的五位和六位十进制数,满足各位数字之和等于


n




输入格式





输入一行,包含一个正整数


n




输出格式





按从小到大的顺序输出满足条件的整数,每个整数占一行。



样例输入



52



样例输出



899998



989989



998899



数据规模和约定





1<=n<=54




*/



#include



main()



{







int n,a,b,c;







scanf(








for(a=1;a<=9;a++)







for(b=0;b<=9;b++)







for(c=0;c<=9;c++)







{











if(n==2*a+2*b+c)











printf(







}







for(a=1;a<=9;a++)







for(b=0;b<=9;b++)







for(c=0;c<=9;c++)







{











if(n==2*a+2*b+2*c)











printf(







}








return 0;



}



/*



#include



int main()



{







int a,b,c,d,e,f,t,all;







scanf(







for(a=1;a<10;a++)











for(b=0;b<10;b++)















for(c=0;c<10;c++)



















for(d=0;d<10;d++)























for(e=0;e<10;e++)























{



























if(a==e)































if(b==d)



































{







































all=a+b+c+d+e;







































if(all==t)







































printf(



































}























}







for(a=1;a<10;a++)











for(b=0;b<10;b++)















for(c=0;c<10;c++)



















for(d=0;d<10;d++)























for(e=0;e<10;e++)



























for(f=0;f<10;f++)



























{































if(a==f)



































if(b==e)







































if(c==d)







































{











































all=a+b+c+d+e+f;











































if(all==t)














































-


-


-


-


-


-


-


-



本文更新与2021-03-03 12:43,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/700006.html

蓝桥杯ACM决赛经典试题及其详解的相关文章