目录
1.🌟成绩统计
📕题目描述:
输入:
7
80
92
56
74
88
100
0
输出
71%
43%
☀️思路:
简单模拟题
✏️代码 :
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
float a, b; //a及格,b优秀
int main() {
cin >> n;
int x;
for (int i = 1; i <= n; i++) {
cin >> x;
if (x >= 60) {
a++;
if (x >= 85) b++;
}
}
int n1 = (int)(a / n * 100 + 0.5);
int n2 = (int)(b / n * 100 + 0.5);
printf("%d%%\n%d%%", n1, n2);
return 0;
}
2.🌟既约分数
📕题目描述:
☀️思路:
两重for循环枚举分子分母,使用gcd判断分子分母最大公约数是否为1
答案为:2481215
✏️代码 :
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
int ans;
int main() {
for (int i = 1; i <= 2020; i++) {
for (int j = 1; j <= 2020; j++) {
if (gcd(i, j) == 1) ans++;
}
}
cout << ans;
return 0;
}
3.🌟最优包含
📕题目描述:
输入:
ABCDEABCD
XAABZ
输出
3
思路请移步此处 最优包含
✏️代码 :
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1001 ;
int f[N][N];//使a中前i个字符串包含b前j个字符串的操作次数的集合的最小值
char a[N];
char b[N];
int main() {
scanf("%s%s", a + 1, b + 1);//下标从1开始
int n = strlen(a + 1);
int m = strlen(b + 1);
memset(f, 0x3f, sizeof f);
for (int i = 1; i <= n; i++) f[i][0] = 0;
f[0][0] = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m ; j++) {
f[i][j] = min(f[i][j], f[i - 1][j]);
if (a[i] == b[j]) f[i][j] = min(f[i][j], f[i - 1][j - 1]);//比较两个串字符是否相同
else f[i][j] = min(f[i][j], f[i - 1][j - 1] + 1);
}
}
cout << f[n][m];
return 0;
}