蓝桥算法提高笔记

**

分解质因数
**
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  给定一个正整数n,尝试对其分解质因数
输入格式
  仅一行,一个正整数,表示待分解的质因数
输出格式
  仅一行,从小到大依次输出其质因数,相邻的数用空格隔开
样例输入
100
样例输出
2 2 5 5
数据规模和约定
  n<=2147483647

#include<iostream>
using namespace std;
int main() {
	int n;
	cin >> n;
	int m = n;
	for (int k = 2; k < n; k++) {
		while (m%k == 0) {
			cout << k << " ";
			m /= k;
		}
	}cout << endl;
	system("pause");
	return 0;
}

(只能60分 有的地方超时了 还没有改进 希望有大哥可以给小弟指出来)

字符串的操作
问题描述
  给出一个字符串S,然后给出q条指令,分别有4种:

1. Append str
  表示在S的最后追加一个字符串str。
  例:
  原字符串:ABCDE
  执行 Append FGHIJ 后
  字符串变为:ABCDEFGHIJ

2. Insert x str
  表示在位置x处插入一个字符串str。(输入保证0<x<=当前字符串长度)
  例:
  原字符串:ABCGHIJ
  执行 Insert 4 DEF 后
  字符串变为:ABCDEFGHIJ

3. Swap a b c d
  表示交换从第a位到第b位的字符串与从第c位到第d位的字符串。(输入保证0<a<b<c<d<=当前字符串长度)
  例:
  原字符串:ABGHIFCDEJ
  执行 Swap 3 5 7 9后
  字符串变为:ABCDEFGHIJ

4. Reverse a b
  表示将从第a位到第b位的字符串反转。(输入保证0<a<b<=当前字符串长度)
  例:
  原字符串:ABGFEDCHIJ
  执行 Reverse 3 7 后
  字符串变为:ABCDEFGHIJ

最后输出按顺序执行完指令后的字符串。
输入格式
  输入第一行包含字符串S,第二行包含一个整数q,接下来q行分别为q个指令。
输出格式
  输出为1行,为按顺序执行完输入指令后的字符串。

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int main() {
	string str;
	cin >> str;
	int n;
	cin >> n;
	while (n--) {
		string zhiling;
		cin >> zhiling;
		if (zhiling[0] == 'A') {
			string zhiling1;
			cin >> zhiling1;
			str += zhiling1;
		}
		if (zhiling[0] == 'I') {
			int x;
			string str2;
			cin >> x >> str2;
			str.insert(x-1, str2);
		}
		if (zhiling[0] == 'S') {
			int a, b, c, d;
			cin >> a >> b >> c >> d;
			string strab, strcd, str1;
			string sa, sb, sc;
			sa == str.substr(0, a-1);//0 dao  a-2
			for (int i = 0; i < a-1; i++) {
				sa += str[i];
			}
			strab = str.substr(a - 1, b - a + 1);
			sb = str.substr(b, c - b - 1);
			strcd = str.substr(c - 1, d - c + 1);
			sc = str.substr(d, str.length() - d);
			str = sa + strcd + sb + strab + sc;
		}
		if (zhiling[0] == 'R') {
			int a, b;
			cin >> a >> b;
			for (int i = a - 1, j = b - 1; i < j; i++, j--) {
				char tmp = str[i];
				str[i] = str[j];
				str[j] = tmp;
			}
		}cout << str << endl;

	}cout << str << endl;
	return 0;
}

字母大小写转换
问题描述
  从键盘输入一个字符,如果是大写字母(A-Z),就转换成小写;如果是小写字母(a-z),就转换成大写,如果是其他字符原样保持并将结果输出。
输入格式
  输入一行,包含一个字符。
输出格式
  输出一行,即按照要求输出的字符。
样例输入
a
样例输出
A

#include<iostream>
#include<cctype>
#include<algorithm>
using namespace std;
int main() {
	char a;
	cin >> a;
	if (isalpha(a)) {
		a ^= 32;//大写变成小写,小写转换成大写
	}
	cout << a << endl;
	return 0;
}

试题 算法提高 质数2

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  给定一个正整数N,请你输出N以内(不包含N)的质数以及质数的个数。
输入格式
  输入一行,包含一个正整数N。
输出格式
  共两行。
  第1行包含一个整数,表示N以内质数的个数。
  第2行包含若干个素数,每两个素数之间用一个空格隔开,素数从小到大输出。
样例输入
10
样例输出
4
2 3 5 7
数据规模和约定
  N<=1000

#include<iostream>
#include<cmath>
using namespace std;
#define N 1001
int a[N];
bool zs(int n) {
	for (int i = 2; i < sqrt(n) + 0.5; i++) {
		if (n%i == 0) {
			return false;
		}
	}return true;
}
int main() {
	int n;
	cin >> n;
	int q = 0;
	for (int i = 2; i < n; i++) {
		if (zs(i)) {
			a[q++] = i;
		}
	}
	cout << q << endl;
	for (int i = 0; i < q; i++) {
		cout << a[i] << " ";
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值