蓝桥杯备赛|成绩统计|排列字母|纸张尺寸
Posted alwaysuzybaiyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯备赛|成绩统计|排列字母|纸张尺寸相关的知识,希望对你有一定的参考价值。
目录
1 成绩统计
蓝桥杯题库502
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
输入描述
输入的第一行包含一个整数 n (1≤n≤10^4),表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。
输入输出样例
示例
#输入 7 80 92 56 74 88 100 0 #输出 71% 43%
1.1 解题思路
简单模拟题。
用 cnt1 表示及格的人数,cnt2 表示优秀的人数,那么答案即为 cnt1/n 、cnt2/n 四舍五入后 ×100。百分号别忘记输出!
1.2 AC_Code
C++ 标程
Java 标程
Python 标程
import os
import sys
# 请在此输入您的代码
n = int(input())
cnt1 = 0
cnt2 = 0
for i in range(1,n+1):
x = int(input())
if x>= 60:
cnt1 += 1
if x>= 85:
cnt2 += 1
print(":.0f%".format(round(100.0 * cnt1 / n , 2)))
print(":.0f%".format(round(100.0 * cnt2 / n , 2)))
2 排列字母
蓝桥杯题库2118
问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝要把一个字符串中的字母按其在字母表中的顺序排列。
例如,LANQIAO 排列后为 AAILNOQ。
又如,GOODGOODSTUDYDAYDAYUP 排列后为 AADDDDDGGOOOOPSTUUYYY。
请问对于以下字符串,排列之后字符串是什么?
WHERETHEREISAWILLTHEREISAWAY
AAAEEEEEEHHHIIILLRRRSSTTWWWY
2.1 解题思路
直接对字符串进行排序即可,可以使用各类语言的标准排序函数,例如C++中使用sort标准库函数;Java中转换成数组使用Arrays.sort排序;Python中先转换成list再进行排序,最后拼接成字符串(因为Python中无法修改字符串元素)。
也可以手动对字符串进行排序,直接输出结果。
a = 'AAAEEEEEEHHHIIILLRRRSSTTWWWY'
print(a)
2.2 AC_Code
C++ 标程
Java 标程
Python 标程
s = "WHERETHEREISAWILLTHEREISAWAY"
s = list(s)
s.sort()
print("".join(s))
3 纸张尺寸
蓝桥杯题库2120
问题描述
在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm ×× 841mm, 将 A0 纸 沿长边对折后为 A1 纸, 大小为 841mm ×× 594mm, 在对折的过程中长度直接取 下整 (实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸, 依此类推。
输入纸张的名称, 请输出纸张的大小。
输入格式
输入一行包含一个字符串表示纸张的名称, 该名称一定是 A0、A1、A2、 A3、A4、A5、A6、A7、A8、A9 之一。
输出格式
输出两行,每行包含一个整数,依次表示长边和短边的长度。
样例输入1
A0
样例输出1
1189 841
样例输入 2
A1
样例输出 2
841 594
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
3.1 解题思路
根据题意维护长边长度 a 和短边长度 b 即可。对于输入 A0 而言,a=1189,b=841。
根据输入的 A 后面的数字 x ,循环 x 次:
—— 每次让长边 a 除以 2(向下取整),短边 b 不变。
—— 然后再根据a ,b 的大小关系进行调整,如果 a<b 则交换 a,b。
3.2 AC_Code
C++ 标程
Java 标程
Python 标程
import os
import sys
# 请在此输入您的代码
x = int(input()[1])
a,b = 1189, 841 # 维护长边长度a和短边长度b
# 输入A0,a=1189,b=841
# 输入Ax,根据x循环x次(对折x次)
for i in range(x):
# 也可以直接a,b=b,a//2
a //= 2 # 每次让长边a除以2(向下取整),短边b不变
if a < b: # 再根据a,b的大小关系进行调整
a, b = b, a # 永远让a表示长边,永远让b表示短边
print(a)
print(b)
蓝桥杯备赛(第十届(1) )
思路一:(一重循环)
2019 < x < y
x至少从2020开始,然后利用等差数列的性质,及
x2 - 2019 * 2019 = y2 - x2 推算出y2 = 2 * x2 - 2019 * 2019
然后判断y2开根号再 平方是否与y2相等,若相等,则输出。
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int t=2019*2019;
for(int x=2020;;x++)
{
int x2=x*x;
int y2=2*x2-t;
int y=sqrt(y2);
if(y*y==y2)
{
cout<<x+y<<endl;
break;
}
}
return 0;
}
思路二:(二重循环)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e4+10;
int main() {
LL t = 2019*2019, x, y;
LL rx = N, ry = N;
for(int i = 2020; i < N; ++i) {
for(int j = i+1; j < N; ++j) {
x = i*i; y = j*j;
if(y-x == x-t && i+j < rx+ry) rx = i, ry = j;
}
}
cout << rx << " " << ry << " " << rx + ry << endl;
return 0;
}
答案: 7020
step1 先找出2019以内的素数;
step2 用记忆化搜索求方案数。
dp[pos][sum]表示素数数组中的位置pos,目前总和为sum的方案数;
dfs(int pos, int sum)求在位置为pos,总和为sum时对应的方案数。
dp[pos][sum] =
dfs(pos+1, sum)+dfs(pos+1, sum+p[pos])
dfs(pos+1, sum)不要pos这个位置上的素数;
dfs(pos+1, sum+p[pos])要pos这个位置上的素数
变量类型用long long
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 3000;
int p[N], v[N], res, tot;
LL dp[400][N];
LL dfs(int pos, int sum) {
if(pos == tot + 2 || sum > 2019) return 0;
if(dp[pos][sum] != -1) return dp[pos][sum];//记忆性递归
if(sum == 2019) return 1;
LL mid = 0;
mid += dfs(pos+1, sum);//不取
mid += dfs(pos+1, sum+p[pos]);//取
return dp[pos][sum] = mid;
}
int main() {
//埃氏筛法素数打表
for(int i = 2; i <= 2019; ++i) {
if(v[i]) continue;
p[++tot] = i;
for(int j = i+i; j <= 2019; j += i)
v[j] = 1;
}
memset(dp, -1, sizeof dp);
cout << dfs(1, 0);
return 0;
}
答案: 55965365465060
以上思路和代码参考学校蓝桥杯老师辅导(讲的太好了)!
以上是关于蓝桥杯备赛|成绩统计|排列字母|纸张尺寸的主要内容,如果未能解决你的问题,请参考以下文章