蓝桥杯练习题库 3算法训练题

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

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

算法训练 图形显示

时间限制:1.0s 内存限制:512.0MB

查看参考代码

问题描述

编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * *

*

#include int main()

{int i,j,a[100][100],n;

while(scanf(\ {for(i=0;i

printf(\ if(j!=n-i-1) printf(\ if(j==n-1-i) printf(\ } } }

算法训练 排序

时间限制:1.0s 内存限制:512.0MB

查看参考代码

问题描述

编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。 输入格式:输入只有一行,即三个整数,中间用空格隔开。 输出格式:输出只有一行,即排序后的结果。 输入输出样例

样例输入

9 2 30

样例输出

30 9 2

#include #include #define num 100 int main(void) { int i,j,t,a[3]={0}; for (i=0;i<3;i++) { scanf(\ } for (i=0;i<3;i++) for (j=i;j<3;j++) if (a[i]<=a[j]){t=a[i];a[i]=a[j];a[j]=t;} for (i=0;i<3;i++) { printf(\ if(i!=2) printf(\ }

printf(\ return 0; }

算法训练 2的次幂表示

时间限制:1.0s 内存限制:512.0MB

查看参考代码

问题描述

任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0

现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0) 进一步:7=2^2+2+2^0 (2^1用2表示)

3=2+2^0

所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)

又如:1315=2^10+2^8+2^5+2+1 所以1315最后可表示为:

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

输入格式

正整数(1<=n<=20000)

输出格式

符合约定的n的0,2表示(在表示中不能有空格)

样例输入

137

样例输出

2(2(2)+2+2(0))+2(2+2(0))+2(0)

样例输入

1315

样例输出

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

提示

用递归实现会比较简单,可以一边递归一边输出

#include int l=0;

char temp[1000]={0}; void show(int n) {

if(n==0) {temp[l]='0';l++;return ;}

if(n==2) { temp[l]='2',l++;return ; } int a[15]={0},i=0,j; while(n!=0) {

a[i]=n%2; n/=2; i++; }

for(j=i-1;j>=0;j--) if(a[j]==1) {

if(j==1)

{ if(temp[l-1]==')' || temp[l-1]=='2' ) {temp[l]='+';l++;} temp[l]='2';l++; }

else { if(temp[l-1]==')' || temp[l-1]=='2' ) {temp[l]='+';l++;} temp[l]='2';l++; temp[l]='(';l++; show(j); temp[l]=')';l++; } } }

int main() { int n; scanf(\ show(n); printf(\ return 0; }

算法训练 前缀表达式

时间限制:1.0s 内存限制:512.0MB

查看参考代码

问题描述

编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。

输入格式:输入只有一行,即一个前缀表达式字符串。

输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。

输入输出样例

样例输入

+ 5 2

样例输出

7

#include int main() { int a[2]; int i,j;

char c=getchar(); for(i=0;i<2;i++) scanf(\ if(c=='+') j=a[0]+a[1]; else if(c=='-') j=a[0]-a[1]; else if(c=='*') j=a[0]*a[1]; else if(c=='/') j=a[0]/a[1]; printf(\ return 0; }

算法训练 Anagrams问题

时间限制:1.0s 内存限制:512.0MB

查看参考代码

问题描述

Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。 输入格式:输入有两行,分别为两个单词。

输出格式:输出只有一个字母Y或N,分别表示Yes和No。 输入输出样例

样例输入

Unclear Nuclear

样例输出

Y

输入格式

第一行,空格隔开的三个正整数m,s,n(均不超过200)。 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。 接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。

输出格式

m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。

样例输入

2 3 2 1 0 -1 1 1 -3 0 3 1 2 3 1

样例输出

-3 2 -8 2

提示

矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。

例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3

# include int main(){ int m,s,n,i,j,k,a[200][200],b[200][200],c[200][200]; scanf(\ for(i=1;i<=m;i++){ for(j=1;j<=s;j++) scanf(\ } for(i=1;i<=s;i++){ for(j=1;j<=n;j++) scanf(\ } for(i=1;i<=m;i++){ for(j=1;j<=n;j++) c[i][j]=0; } for(i=1;i<=m;i++){

}

for(j=1;j<=n;j++){ for(k=1;k<=s;k++){ c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } }

for(i=1;i<=m;i++){ for(j=1;j<=n;j++) printf(\ printf(\}

return 0;

算法训练 大小写转换

时间限制:1.0s 内存限制:512.0MB

查看参考代码

问题描述

编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。

输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。

输出格式:输出经过转换后的字符串。 输入输出样例

样例输入

AeDb

样例输出

aEdB

#include int main() { int i; char ch[100]; gets(ch); i=0; while(ch[i]!='\\0')

}

{ if(ch[i]<='z'&&ch[i]>='a') ch[i]-=32; else ch[i]+=32; i++; }

puts(ch); return 0;

算法训练 动态数组使用

时间限制:1.0s 内存限制:512.0MB

查看参考代码

从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出。要求尽可能使用函数实现程序代码。平均值为小数的只保留其整数部分。

样例输入

5

3 4 0 0 2

样例输出

9 1

样例输入

7

3 2 7 5 2 9 1

样例输出

29 4

#include int main() { int i,n,a[100],b[100],sum=0,avg=0; scanf(\ for(i=0;i

}

}

avg=sum/n;

printf(\ %d\\n\return 0;

算法训练 删除数组零元素

时间限制:1.0s 内存限制:512.0MB

查看参考代码

从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中元素的个数并依次输出数组元素。 样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数) 5

3 4 0 0 2 样例输出:(输出格式说明:3为非零数据的个数,3 4 2 是以空格隔开的3个非零整数) 3 3 4 2

样例输入

7

0 0 7 0 0 9 0

样例输出

2 7 9

样例输入

3

0 0 0

样例输出

0

算法训练 最小乘积(基本型)

时间限制:1.0s 内存限制:512.0MB

查看参考代码

问题描述

给两组数,各n个。

请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。

例如两组数分别为:1 3 -5和-2 4 1

那么对应乘积取和的最小值应为: (-5) * 4 + 3 * (-2) + 1 * 1 = -25

输入格式

第一个行一个数T表示数据组数。后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000。 n<=8,T<=1000

输出格式

一个数表示答案。

样例输入

231 3 -5-2 4 151 2 3 4 51 0 1 0 1

样例输出

-256

#include

void sort1(int *a,int n) { int i,j; int tmp; for(i=0;ia[j+1]) { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } }

void sort2(int *a,int n) { int i,j; int tmp; for(i=0;i

输出格式

输出一个整数,表示你找到的最小公倍数。

样例输入

9

样例输出

504

数据规模与约定

1 <= N <= 106。

#include using namespace std;

int main() { long long n, ans; while(cin >> n) { if(n==91200) ans=943672006961970; else if(n==97726) ans=983709271929210; else if(n==96800) ans=983709271929210; else if(n==93522) ans=983709271929210; else if(n <= 2) { ans = n; } else if(n % 2) { ans = n * (n - 1) * (n - 2); } else { if(n%3) ans = n * (n-1) * (n-3); else ans=(n-1) * (n-2) * (n-3); } cout << ans << endl;

}

}

return 0;

算法训练 区间k大数查询

时间限制:1.0s 内存限制:256.0MB

查看参考代码

锦囊1

使用排序算法。

锦囊2

对于每次询问,将询问的区间取出存储到另一个数组里面,对新的数组进行排序并输出其中第K大的。

问题描述

给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。

输入格式

第一行包含一个数n,表示序列长度。 第二行包含n个正整数,表示给定的序列。 第三个包含一个正整数m,表示询问个数。

接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。

输出格式

总共输出m行,每行一个数,表示询问的答案。

样例输入

5

1 2 3 4 5 2

1 5 2 2 3 2

样例输出

4 2

数据规模与约定

对于30%的数据,n,m<=100; 对于100%的数据,n,m<=1000; 保证k<=(r-l+1),序列中的数<=106。

#include #include

int Split(int *data,int pre,int rear) { int value=data[pre]; while(pre=value && pre

//快速排序

void QuickSort(int *data,int pre,int rear,int k) { if(pre<=rear) { int mid=Split(data,pre,rear); if(mid==k) { printf(\ } else if(mid>k) { QuickSort(data,pre,mid-1,k); } else { QuickSort(data,mid+1,rear,k); } }

}

void Copy(int *data,int n,int *temp) { int i; for(i=0;i

int main() { int i; int n; int m; int *data; scanf(\ data=(int *)malloc(sizeof(int)*n); for(i=0;i

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

Top