蓝桥杯练习系统部分试题答案

蓝桥杯练习系统部分试题答案

备战 2019蓝桥杯

文章目录

  • 蓝桥杯练习系统部分试题答案
    • 数列排序
    • 01字串
    • 数列特征
    • FJ的字符串
    • 查找整数
    • 递归求二项式系数值
    • 排序
    • 图形显示
    • 寻找数组中最大值
    • 简单加法
    • P0103
    • 8-1因式分解
    • 三个整数的排序

数列排序

问题描述
  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
  第一行为一个整数n。
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
  输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9

#include<iostream>
using namespace std;

int main()
{
	int n, i;
	int a[202];
	cin >> n;
	int exchange = n;
	int bound = n;
	a[0] = 0;
	for (i = 1;i <= n;i++)
		cin >> a[i];
	while (exchange)
	{
		bound = exchange;
		exchange = 0;
		for (i = 1;i < bound;i++)
		{
			if (a[i] > a[i + 1])
			{
				a[0] = a[i];
				a[i] = a[i + 1];
				a[i + 1] = a[0];
				exchange = i ;
			}
		}
	}
	for (i = 1;i <= n;i++)
		cout << a[i] << " ";
	return 0;
}

运行截图
蓝桥杯练习系统部分试题答案_第1张图片

01字串

问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011

#include<iostream>
using namespace std;

int main()
{
	for (int a = 0;a < 2;a++)
		for (int b = 0;b < 2;b++)
			for (int c = 0;c < 2;c++)
				for (int d = 0;d < 2;d++)
					for (int e = 0;e < 2;e++)
						cout << a << b << c << d << e << endl;
	return 0;

}

运行截图
蓝桥杯练习系统部分试题答案_第2张图片

数列特征

问题描述
给出n个数,找出这n个数的最大值,最小值,和。
输入格式
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
数据规模与约定
1 <= n <= 10000。

#include<iostream>
using namespace std;

int main()
{
	int n;
	cin >> n;
	int *p = new int[n+1];
	for (int i = 1;i < n + 1;i++)
		cin >> p[i];
	int max = p[1];
	int min = p[1];
	int sum = 0;
	for (int i = 1;i < n+1;i++)
	{
		if (p[i] < min)
			min = p[i];
		if (p[i] > max)
			max = p[i];
		sum += p[i];
	}
	cout << max << endl;
	cout << min << endl;
	cout << sum << endl;
	return 0;

}

参考答案

#include <iostream>
#include <string>
using namespace std;
#include <math.h>
int main()
{
    int n,max=-10000,min=10000,sum=0;
    cin>>n;
    int *q=new int[n];
    for(int i=0;i<n;i++)    
    {
        cin>>q[i];
        sum+=q[i];
    }
    for(int j=0;j<n;j++)
    {
        if(q[j]>max)
            max=q[j];
        if(q[j]<min)
            min=q[j];
    }
    cout<<max<<endl;
    cout<<min<<endl;
    cout<<sum<<endl;
    return 0;
}

运行截图

蓝桥杯练习系统部分试题答案_第3张图片

FJ的字符串

问题描述
  FJ在沙盘上写了这样一些字符串:
  A1 = “A”
  A2 = “ABA”
  A3 = “ABACABA”
  A4 = “ABACABADABACABA”
  … …
  你能找出其中的规律并写所有的数列AN吗?
输入格式
  仅有一个数:N ≤ 26。
输出格式
  请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
样例输入
3
样例输出
ABACABA

#include<iostream>
#include<string>
using namespace std;

int main()
{
	int num;
	cin >> num;
	string s1;
	string s2 = "A";
	for (int i = 1;i <= num;i++)
	{
		s2 = s1 + char(64 + i) + s1;
		s1 = s2;
	}
	cout << s2 << endl;
	return 0;

}

参考答案

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int n;
    cin>>n;
    string s1="A";
    string s2="A";
    for(int i=1;i<n;i++)
    {
        s2=s1+char(65+i)+s1;
        s1=s2;
    }
    cout<<s2<<endl;
    return 0;
}

运行截图

蓝桥杯练习系统部分试题答案_第4张图片
蓝桥杯练习系统部分试题答案_第5张图片

查找整数

问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。

#include<iostream>
using namespace std;
//查找整数

int main()
{
	int a[1001];
	int n, k;
	bool judge=false;
	cin >> n;
	for (int i = 0;i < n;i++)
		cin >> a[i];
	cin >> k;
	for (int i = 0;i < n;i++)
	{
		if (a[i] == k)
		{
			cout << i + 1 << endl;
			judge = true;
			break;
		}
	}
	if (judge == false)
		cout << -1 << endl;

	return 0;

}

运行截图
蓝桥杯练习系统部分试题答案_第6张图片
蓝桥杯练习系统部分试题答案_第7张图片

递归求二项式系数值

问题描述
在这里插入图片描述
样例输入
一个满足题目要求的输入范例。
3 10
样例输出
在这里插入图片描述
与上面的样例输入对应的输出。
数据规模和约定
  输入数据中每一个数的范围。
  例:结果在int表示时不会溢出。

#include<iostream>
using namespace std;

int function(int k,int n)
{
	if (k == 0 || k == n)
		return 1;
	else
		return function(k, n - 1) + function(k - 1, n - 1);
}

int main()
{
	int n, k;
	cin >> k >> n;
	cout << function(k, n);
	return 0;
}

运行截图
蓝桥杯练习系统部分试题答案_第8张图片

排序

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

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a, int b)
{
	return a > b;
}
int main()
{
	int a[3];
	for (int i = 0;i < 3;i++)
		cin >> a[i];
	sort(a, a + 3, cmp);//sort的前两个参数是起始地址和终止地址,第三个参数为比较函数
	for (int i = 0;i < 3;i++)
		cout << a[i] << " ";
	return 0;
}

运行截图
蓝桥杯练习系统部分试题答案_第9张图片

图形显示

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

#include<iostream>
using namespace std;

int main()
{
	int n;
	cin >> n;
	for (int i = 0;i < n;i++)//行数
	{
		for (int j = 0;j < n - i;j++)//每行输出个数
		{
			cout << "*";
			cout << " ";
		}
		cout << endl;
	}
	return 0;
}

运行截图
蓝桥杯练习系统部分试题答案_第10张图片

寻找数组中最大值

问题描述
  对于给定整数数组a[],寻找其中最大值,并返回下标。
输入格式
  整数数组a[],数组元素个数小于1等于100。输出数据分作两行:第一行只有一个数,表示数组元素个数;第二行为数组的各个元素。
输出格式
  输出最大值,及其下标
样例输入
3
3 2 1
样例输出
3 0

#include<iostream>
using namespace std;
/*问题描述
  对于给定整数数组a[],寻找其中最大值,并返回下标。
输入格式
  整数数组a[],数组元素个数小于1等于100。输出数据分作两行:第一行只有一个数,表示数组元素个数;第二行为数组的各个元素。
输出格式
  输出最大值,及其下标
*/
const int max = 100;
int main()
{
	int n;
	cin >> n;
	int *p = new int[n];
	for (int i = 0;i < n;i++)
		cin >> p[i];
	int k;//最大值k
	int loc;
	k = p[0];
	for(int i=1;i<n;i++)
		if (k < p[i])
		{
			int temp;
			temp = k;
			k = p[i];
			p[i] = temp;
			loc = i;
		}
	cout << k << " " << loc;

	return 0;
}

运行截图
蓝桥杯练习系统部分试题答案_第11张图片

简单加法

问题描述
  小于10的自然数中有四个数字能除尽3或5(3, 5, 6, 9),它们的和为23。
  请计算所有小于1000的自然数中能除尽3或5的数字的合。然后使用标准输出cout,输出你的结果。
输入格式
  无。
输出格式
  一行一个整数,表示你的结果。

#include<iostream>
using namespace std;

int main()
{
	double sum=0;
	int k;
	for (int i = 0;i < 1000;i++)
	{
		if (i % 3 == 0 || i % 5 == 0)
		{
			k = i;
			sum += k;
		}
	}
	cout << sum;
	return 0;
}

运行截图
蓝桥杯练习系统部分试题答案_第12张图片

P0103

从键盘输入一个大写字母,要求改用小写字母输出。
输入
  A
输出
  a

#include<iostream>
using namespace std;

int main()
{
	char c;
	cin >> c;
	char ans = c + 32;
	cout << ans;
	return 0;
}

运行截图
蓝桥杯练习系统部分试题答案_第13张图片

8-1因式分解

问题描述
  设计算法,用户输入合数,程序输出若个素数的乘积。例如,输入6,输出23。输入20,输出22*5。
样例
  与上面的样例输入对应的输出。
  例:
在这里插入图片描述
在这里插入图片描述
数据规模和约定
  输入数据中每一个数在int表示范围内

#include<iostream>
using namespace std;

int main()
{
	int n;
	int x=1;
	bool flag = true;
	cin >> n;
	while (n != 1)
	{
		x++;
		while (n%x == 0)
		{
			n = n / x;
			if (flag)
			{
				flag = false;
				cout << x;
			}
			else
			{
				cout << "*" << x;
			}
		}
	}
	return 0;
}

运行截图
蓝桥杯练习系统部分试题答案_第14张图片
蓝桥杯练习系统部分试题答案_第15张图片

三个整数的排序

问题描述
  输入三个数,比较其大小,并从大到小输出。
输入格式
  一行三个整数。
输出格式
  一行三个整数,从大到小排序。
样例输入
33 88 77
样例输出
88 77 33

#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(int a, int b)
{
	return a > b;
}

int main()
{
	int a[3];
	for (int i = 0;i < 3;i++)
		cin >> a[i];
	sort(a, a + 3,cmp);
	for (int i = 0;i < 3;i++)
		cout << a[i] << " ";
	return 0;


}

运行截图
蓝桥杯练习系统部分试题答案_第16张图片

你可能感兴趣的:(数据结构与算法,C++)