白乐天

道阻且长,行则将至。

算法小记

只有输出

1
2
3
4
5
6
7
8
9
#include "iostream"

using namespace std;

int main(){
const char str[] = "Hello World!";
cout << str << endl;
return 0;
}

两数之和

给定两整数求和

1
2
3
4
5
6
7
8
9
10
#include "iostream"

using namespace std;

int main(){
int a,b;
cin >> a >> b;
cout << a+b << endl;
return 0;
}

数组

一维数组

1
2
3
4
5
输入描述:
第一行有一个整数n。
第二行有n个整数a。
输出描述:
输出一个整数,代表数组元素之和。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "iostream"
using namespace std;

int main(){
int n;
cin >> n;

int a;
long long sum = 0;

for(int i = 0;i<n;i++){
cin >> a;
sum+=a;
}
cout << sum;
return 0;
}

多组 一维数组 T组形式

1
2
3
4
5
6
7
输入描述:
第一行有一个整数t。
随后t组数据。
每组的第一行有一个整数n。
每组的第二行有n个整数a。
输出描述:
输出t行,每行一个整数,代表数组元素之和。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "iostream"
using namespace std;

int main(){
int t;
cin >> t;
for(int i = 0;i<t;i++){
int n;
cin >> n;
int a;
long long sum = 0;
for(int i = 0;i<n;i++){
cin >> a;
sum +=a;
}
cout << sum << endl;
}
return 0;
}

二维数组

1
2
3
4
5
输入描述:
第一行有两个整数n和m。
随后n行,每行有m个整数
输出描述:
输出一个整数,代表数组元素之和。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "iostream"

using namespace std;

int main(){
int n,m;
cin >> n >> m;
long long sum = 0;

for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++){
int a;
cin >> a;
sum+=a;
}
}
cout << sum << endl;
return 0;
}

多组 二维数 T组形式

1
2
3
4
5
6
7
输入描述:
第一行有一个整数 t。
随后 t 组数据。
每组的第一行有两个整数 n和 m。
每组的随后 n 行,每行有 m 个整数 a 。
输出描述:
输出 t 行,每行一个整数,代表数组元素之和。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "iostream"
using namespace std;

int main(){
int t;
cin >> t;
for(int i=0;i<t;i++){
int n,m;
cin >> n >> m;
long long sum = 0;
for(int j=0;j<n;j++){
for(int k=0;k<m;k++){
int a;
cin >> a;
sum+=a;
}
}
cout << sum << endl;
}
return 0;
}

字符串

字符串逆序

1
2
3
4
5
6
7
给定一个长度为 
n的字符串s ,请你将其倒置,然后输出。
输入描述:
第一行有一个整数 n。
第二行有一个字符串 s,仅包含小写英文字符。
输出描述:
输出一个字符串,代表倒置后的字符串 s 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "iostream"
#include "algorithm"
#include "string"
using namespace std;

int main(){
int n;
cin >> n;
string s;
cin >> s;
reverse(s.begin(),s.end());
cout << s << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "iostream"
using namespace std;

int main(){
int n;
cin >> n;
char s[n];
cin >> s;
// 手动反转字符串
for (int i = 0; i < n / 2; ++i) {
char temp = s[i];
s[i] = s[n - 1 - i];
s[n - 1 - i] = temp;
}
cout << s << endl;
return 0;
}

多组 字符串 T组形式

1
2
3
4
5
6
7
给定 t 组询问,每次给出一个长度为 n 的字符串 s ,请将其倒置,然后输出。
输入描述:
第一行有一个整数 t随后 t 组数据。
每组的第一行有一个整数 n 。
每组的第二行有一个字符串 s,仅包含小写英文字符。
输出描述:
输出 t 行,每行一个字符串,代表倒置后的字符串 s 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "iostream"
#include "algorithm"
#include "string"
using namespace std;

int main(){
int t;
cin >> t;
for(int i = 0;i<t;i++){
int n;
cin >> n;
string s;
cin >> s;
reverse(s.begin(),s.end());
cout << s << endl;
}
return 0;
}

二维字符数组

1
2
3
4
5
6
7
8
描述:
给定一个 n 行 m 列的二维字符数组 a ,第 i 行第 j 列元素的值为 a。
请对行和列都倒置,然后输出之。
输入描述:
第一行有两个整数 n。
随后 n 行,每行有 m 个字符,仅包含小写英文字符 。
输出描述:
输出一个二维字符数组。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;

int main() {
int n,m;
cin >> n >> m;
char arr[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin >>arr[i][j];
}
}

for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cout << arr[n-1 - i][m-1 - j];
}
cout << endl;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "iostream"
using namespace std;

int main() {
int n, m;
cin >> n >> m;
char arr[n][m];

// 读取输入
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> arr[i][j];
}
}

// 行倒置(交换上下对称行)
for (int i = 0; i < n / 2; ++i) {
for (int j = 0; j < m; ++j) {
swap(arr[i][j], arr[n - 1 - i][j]);
}
}

// 列倒置(交换左右对称列)
for (int j = 0; j < m / 2; ++j) {
for (int i = 0; i < n; ++i) {
swap(arr[i][j], arr[i][m - 1 - j]);
}
}

// 输出结果
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cout << arr[i][j];
}
cout << endl;
}
return 0;
}

带空格的字符串

1
2
3
4
5
6
7
8
9
描述:
给定 t 组询问,每次给出一个长度为 n 的带空格的字符串 s ,请你去掉空格之后,将其倒置,然后输出。
输入描述:
第一行有一个整数 t 。
随后 t 组数据。
每组的第一行有一个整数 n 。
每组的第二行有一个字符串 s,仅包含小写英文字符和空格,保证字符串首尾都不是空格。
输出描述:
输出 t 行,每行一个字符串,代表倒置后的字符串 s 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "iostream"
#include "string"
using namespace std;

int main() {
int t;
cin >> t;
for(int i=0;i<t;i++){
int n;
cin >> n;
cin.ignore();
string s;
getline(cin, s);

for (int j = 0; j < n; ++j) {
if(s[n-1-j]!=' '){
cout << s[n-1-j];
}
}
cout << endl;
}
}

格式化数字

保留小数位数

1
2
3
4
5
6
7
8
描述:
给定一个小数 n ,请保留 3 位小数后输出。
如果原来的小数位数少于 3 ,需要补充 0 。
如果原来的小数位数多于 3 ,需要四舍五入到 3 位。
输入:
第一行有一个小数 n 。
输出:
输出一个小数,保留 3 位。
1
2
3
4
5
6
7
8
9
10
#include "iostream"
#include "stdio.h"
using namespace std;

int main() {
float t;
cin >> t;
printf("%.3f\n",t);
return 0;
}

补充前导0

1
2
3
4
5
6
给定一个正整数 n ,请你保留 9 个数位,然后输出。
如果数位少于 9 个,那么需要补充前导零。
输入描述:
第一行有一个整数 n 。
输出描述:
输出一个数字,保留 9 个数位。
1
2
3
4
5
6
7
8
9
10
#include "iostream"
#include "stdio.h"
using namespace std;

int main() {
int t;
cin >> t;
printf("%09d\n",t);
return 0;
}

spj判断YES与NO

1
2
3
4
5
6
7
8
9
描述:
给定一个正整数n
如果n是奇数,输出yes
如果n是偶数,输出no
输入描述:
第一行有一个整数n
输出描述:
如果n是奇数,输出yes
如果n是偶数,输出no
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;

int main() {
int n;
cin >> n;
if (n%2==0){
cout << "NO" << endl;
} else{
cout << "YES" << endl;
}
return 0;
}

spj浮点误差

1
2
3
4
5
6
7
8
描述:
给定一个圆的半径 r ,请你求出该圆的面积。
保证半径 r 是整数。
如果你的答案和标准答案的误差不超过 0.001,即可通过本题。
输入描述:
第一行有一个整数 n。
输出描述:
输出一个数字,代表圆的面积。
1
2
3
4
5
6
7
8
9
10
11
12
#include "iostream"
#include "stdio.h"
#include "cmath"
using namespace std;

int main() {
int r;
cin >> r;
double s = pow(r,2)*M_PI;
printf("%.6f\n",s);
return 0;
}

spj判断数组之和

1
2
3
4
5
6
7
描述
给定两个整数 n 和 m ,请你构造一个长度为 n 的正整数数组,使得其元素之和为 m 。
保证有 n≤m 。
输入描述:
第一行有两个整数 n 和 m。
输出描述:
输出 n 个正整数,它们的和需要为 m 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;

int main() {
int n,m;
cin >> n >> m;
int sum =0;
for(int i =1;i<=n;i++){
sum+=i;
}
if(sum==m){
for(int i =1;i<=n;i++){
cout << i << " ";
}
}else if (m==n){
for(int i =1;i<=n;i++){
cout << 1 << " ";
}
} else{
for(int i =1;i<=n-1;i++){
cout << 1 << " ";
}
cout << m-n+1;
}

return 0;
}