蓝桥比赛练习C语言_蓝桥杯试题c语言答案
蓝桥比赛练习C语言由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“蓝桥杯试题c语言答案”。
时间限制:1.0s 内存限制:256.0MB
1闰年判断
问题描述
给定一个年份,判断这一年是不是闰年。当以下情况之一满足时,这一年是闰年: 1.年份是4的倍数而不是100的倍数; 2.年份是400的倍数。其他的年份都不是闰年。
输入格式
输入包含一个整数y,表示当前的年份。
输出格式
输出一行,如果给定的年份是闰年,则输出yes,否则输出no。
说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。
样例输入
2013 样例输出
no 样例输入
2016 样例输出
yes 数据规模与约定
1990
本题的C参考代码如下:
1.#include 2.int main()3.{ 4.int y;5.scanf(“%d”, &y);6.if(y%4==0 && y%100!=0 || y%400==0)7.printf(“yes”);8.else 9.printf(“no”);10.return 0;11.}
2.01字串
问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000 00001 00010 00011 本题的C参考代码如下:
1.#include 2.int main()3.{ 4.int i, j, k, l, m;5.for(i = 0;i
3.字母图形
问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入7 样例输出
ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 数据规模与约定
本题的C参考代码如下:
1.#include 2.#include 3.#define MAXSIZE 26 4.5.//输出
6.void Print(char matrix[MAXSIZE][MAXSIZE],int n,int m)7.{ 8.int i,j;9.for(i=0;i
19.//实现字母图形
20.void Drawing(int n,int m)21.{ 22.int i,j;23.int point=0;24.char str;25.char matrix[MAXSIZE][MAXSIZE];26.for(i=0;i=0;j--)35.{ 36.matrix[i][j]=++str;37.} 38.} 39.Print(matrix,n,m);40.} 41.int main()42.{ 43.int n,m;44.scanf(“%d%d”,&n,&m);45.Drawing(n,m);46.return 0;47.}
4.数列特征
问题描述
给出n个数,找出这n个数的最大值,最小值,和。
输入格式
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入1 3-2 4 5 样例输出-2 3 数据规模与约定
本题的C参考代码如下:
1.#include 2.#include 3.#define MAXSIZE 10000 4.5.int main()6.{ 7.int i;8.int n;9.int value;10.int max=-MAXSIZE;
11.int min=MAXSIZE;12.int sum=0;13.scanf(“%d”,&n);14.for(i=0;imax)max=value;18.if(value
5.查找整数
问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入1 9 4 8 3 9 9 样例输出
数据规模与约定
本题的C参考代码如下:
1.#include 2.#define MAXN 10001 3.int n, a, ans;4.int s[MAXN];5.int main()6.{ 7.int i;8.scanf(“%d”, &n);9.for(i = 0;i
6.杨辉三角形
问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
i
下面给出了杨辉三角形的前4行:
1
3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入样例输出1 1 1 2 1 1 3 3 1 数据规模与约定
本题的C参考代码如下:
1.#include 2.#define MAXN 40 3.int n;4.int a[MAXN][MAXN];5.int main()6.{ 7.int i, j;8.scanf(“%d”, &n);9.a[0][0] = 1;10.for(i = 0;i
7.特殊的数字
时间限制:1.0s 内存限制:512.0MB
问题描述
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。
输出格式
按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。
1.#include 2.int main()3.{ 4.int i,j,k,n;5.for(n=100;n
7.i=n/100;8.j=n/10%10;9.k=n%10;10.if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)11.printf(“%dn”,n);12.} 13.return 0;14.} 8.回文数
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
本题的C参考代码如下:
1.#include 2.int main()3.{ 4.int a,b,c,d,i;5.for(i=1000;i
9.特殊回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
样例输出
899998 989989 998899 数据规模和约定
1
本题的C参考代码如下:
1.#include 2.int main()3.{ 4.int a,b,c,d,e,f,t,all;5.scanf(“%d”,&t);6.for(a=1;a
21.for(b=0;b
10.十进制转十六进制
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0
输出这个整数的16进制表示
样例输入样例输出
1E 本题的C参考代码如下:
1.#include 2.#include 3.char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};4.5.//输出
6.void Print(char *num,int n)7.{ 8.int i;9.for(i=n-1;i>=0;i--)printf(“%c”,num[i]);10.printf(“ ”);11.printf(“n”);12.} 13.14.//将十六进制数转换为十进制数
15.int Transform(char *num,long long value)16.{ 17.int n=0;18.while(value>=16)19.{ 20.num[n++]=data[value%16];21.value/=16;22.} 23.num[n++]=data[value%16];24.return n;25.} 26.27.int main()28.{ 29.long long value;30.char num[10];31.int n;32.scanf(“%I64d”,&value);33.n=Transform(num,value);34.Print(num,n);35.return 0;36.}
11.十六进制转十进制
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF 样例输出
65535 本题的C参考代码如下:
1.#include 2.#include 3.#include 4.int main()5.{ 6.double sum=0,x;7.char a[8];8.int len,i=0;9.gets(a);10.len=strlen(a);11.while(len)12.{ 13.if(a[len-1]>='A'&&a[len-1]
22.return 0;23.24.}
12.十六进制转八进制
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n(1
接下来n行,每行一个由0~
9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入39 123ABC 样例输出
4435274 提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
本题的C参考代码如下:
1.#include 2.#include 3.#include 4.5.#define MaxSize 100000 6.7.void saveB(char *b,char c3,char c2,char c1,char c0,int start)8.{ 9.b[start]=c3;10.b[start+1]=c2;11.b[start+2]=c1;12.b[start+3]=c0;13.} 14.int htob(char *h,char *b)15.{ 16.int i,j;17.int hl=strlen(h);18.for(i=0;i
20.{ 21.case '0': 22.{ 23.saveB(b,'0','0','0','0',4*i);24.break;25.} 26.case '1': 27.{ 28.saveB(b,'0','0','0','1',4*i);29.break;30.} 31.case '2': 32.{ 33.saveB(b,'0','0','1','0',4*i);34.break;35.} 36.case '3': 37.{ 38.saveB(b,'0','0','1','1',4*i);39.break;40.} 41.case '4': 42.{ 43.saveB(b,'0','1','0','0',4*i);44.break;45.} 46.case '5': 47.{ 48.saveB(b,'0','1','0','1',4*i);49.break;50.} 51.case '6': 52.{ 53.saveB(b,'0','1','1','0',4*i);54.break;55.} 56.case '7': 57.{ 58.saveB(b,'0','1','1','1',4*i);59.break;60.} 61.case '8': 62.{ 63.saveB(b,'1','0','0','0',4*i);
64.break;65.} 66.case '9': 67.{ 68.saveB(b,'1','0','0','1',4*i);69.break;70.} 71.case 'A': 72.{ 73.saveB(b,'1','0','1','0',4*i);74.break;75.} 76.case 'B': 77.{ 78.saveB(b,'1','0','1','1',4*i);79.break;80.} 81.case 'C': 82.{ 83.saveB(b,'1','1','0','0',4*i);84.break;85.} 86.case 'D': 87.{ 88.saveB(b,'1','1','0','1',4*i);89.break;90.} 91.case 'E': 92.{ 93.saveB(b,'1','1','1','0',4*i);94.break;95.} 96.case 'F': 97.{ 98.saveB(b,'1','1','1','1',4*i);99.break;100.} 101.} 102.return 4*hl;103.} 104.int btoo(char *b,char *o,int bl)105.{ 106.int i,j;107.int ol;
108.int value;109.if(bl%3==0)110.ol=bl/3;111.else 112.ol=bl/3+1;113.j=bl-1;114.for(i=ol-1;i>=0;i--)115.{ 116.if(i>0)117.o[i]=b[j]-48+(b[j-1]-48)*2+(b[j-2]-48)*4+48;118.else 119.{ 120.switch(j)121.{ 122.case 2: 123.o[i]=b[j]-48+(b[j-1]-48)*2+(b[j-2]-48)*4+48;124.break;125.case 1: 126.o[i]=b[j]-48+(b[j-1]-48)*2+48;127.break;128.case 0: 129.o[i]=b[j];130.break;131.} 132.133.} 134.j=j-3;135.} 136.return ol;137.} 138.void printO(char *o,int ol)139.{ 140.int i=0;141.if(o[0]=='0')142.i=1;143.for(;i
152.char b[4*MaxSize];153.char o[4*MaxSize/3+1];154.int n,i,bl,ol;155.scanf(“%d”,&n);156.getchar();157.for(i=0;i
163.printO(o,ol);164.} 165.}
13.数列排序
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入8 3 6 4 9 样例输出4 6 8 9 本题的C参考代码如下:
1.#include 2.#include 3.void Print(int *data,int n)4.{ 5.int i;
6.for(i=0;i
13.int Split(int *data,int pre,int rear)14.{ 15.int value=data[pre];16.while(pre=value && pre
27.//快速排序
28.void QuickSort(int *data,int pre,int rear)29.{ 30.if(pre
38.int main()39.{ 40.int i;41.int n;42.int *data;43.scanf(“%d”,&n);44.data=(int *)malloc(sizeof(int)*n);45.for(i=0;i
50.Print(data,n);51.return 0;52.} /*问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。样例输入 FFFF 样例输出 65535*/ #include #include #include #include
int main()
{
char a[10],i=0;long int sum=0,k1;char k;s:printf(“Please enter a sixteen band:”);while(1){ scanf(“%c”,&k);
if(k>48&&k
else if(k==48)a[i++]=16;else if(k>='a'&&k='A'&&k
int main(){ int i=0,n=0;char a[10];unsigned long sum=0;
scanf(“%s”,a);n=sizeof(a);
for(i=0;i
//注:ascii码:A~65 0~48
//b=a[i];
if(a[i]>='0'&&a[i]
{
sum=sum*16;
sum=sum+a[i]-'0';
}
if(a[i]>='A'&&a[i]
{
sum=sum*16;
sum=sum+a[i]-'A'+10;
} } printf(“%u”,sum);//----------------------------
return 0;}*/ /*1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。*/
int main(){
int a,b,c,d,i;
for(i=1000;i
a=i/1000;
b=i%1000/100;
c=i%100/10;
d=i%10;
if(a==d&&b==c)printf(“%6d”,i);} }