**
分解质因数
**
资源限制
时间限制: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;
}