https://www.luogu.com.cn/problem/B3848
https://www.luogu.com.cn/problem/B3849
https://www.luogu.com.cn/problem/B3842
https://www.luogu.com.cn/problem/B3843
https://www.luogu.com.cn/problem/B3867
https://www.luogu.com.cn/problem/B3868
https://www.luogu.com.cn/problem/B3925
https://www.luogu.com.cn/problem/B3926
1.[GESP样题 三级] 逛商场
题目描述
小明是个不太有计划的孩子。这不,刚到手的零花钱,就全部拿着逛商场去了。
小明的原则很简单,见到想买的物品,只要能买得起,就一定会买下来之后才会继续往前走;如果买不起就直接跳过。
一天下来,小明到底买了多少物品呢?
输入格式
输入共 33 行:
第一行是一个整数 �N,表示商场中共有 �N 种小明想买的物品(1≤�≤1001≤N≤100);
第二行共有 �N 个整数,分别表示小明先后见到想买的物品的价格;
第三行是一个整数 �X,表示开始时小明共有 �X 元零花钱。
输出格式
输出 11 行,包含一个整数,表示小明买到的物品数。
输入输出样例
输入 #1
6 7 5 9 10 7 4 30
输出 #1
4
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[100005],x,ans=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
cin>>x;
for(int i=1;i<=n;i++){
if(a[i]<=x){
x-=a[i];
ans++;
}
else continue;
}
cout<<ans<<"\n";
return 0;
}
2.[GESP样题 三级] 进制转换
题目描述
小美刚刚学习了十六进制,她觉得很有趣,想到是不是还有更大的进制呢?在十六进制中,用 A
表示 1010、F
表示 1515。如果扩展到用 Z
表示 3535,岂不是可以表示 3636 进制数了嘛!
所以,你需要帮助她写一个程序,完成十进制转 �R 进制(2≤�≤362≤R≤36)的工作。
输入格式
输入两行,第一行包含一个正整数 �N,第二行包含一个正整数 �R,保证 1≤�≤1061≤N≤106。
输出格式
输出一行,为 �N 的 �R 进制表示。
输入输出样例
输入 #1
123 25
输出 #1
4N
AC代码:
#include<bits/stdc++.h>
using namespace std;
char a[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
void convert(int x,int n){
if(x==0)
return;
convert(x/n,n);
cout<<a[x%n];
}
int main(){
int x,n;
cin>>x>>n;;
if(x==0)
cout<<"0\n";
else
convert(x, n);
cout<<"\n";
return 0;
}
3.[GESP202306 三级] 春游
题目描述
老师带领同学们春游。已知班上有 �N 位同学,每位同学有从 00 到 �−1N−1 的唯一编号。到了集合时间,老师确认是否所有同学都到达了集合地点,就让同学们报出自己的编号。到达的同学都会报出自己的编号,不会报出别人的编号,但有的同学很顽皮,会多次报出。你能帮老师找出有哪些同学没有到达吗 ?。
输入格式
输入包含 22 行。第一行包含两个整数 �N 和 �M,表示班级有 �N 位同学,同学们共有 �M 次报出编号。约定 2≤�,�≤10002≤N,M≤1000。
第二行包含 �M 个整数,分别为 �M 次报出的编号。约定所有编号是小于 �N 的非负整数。
输出格式
输出一行。如果所有同学都到达,则输出 �N;否则由小到大输出所有未到达的同学编号,空格分隔。
输入输出样例
输入 #1
3 3 0 2 1
输出 #1
3
输入 #2
3 5 0 0 0 0 0
输出 #2
1 2
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1001],b[1001],c[1001],q=1;
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
b[i]=i;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(b[i]==a[j]){
c[i]=1;
}
}
}
for(int i=0;i<n;i++){
if(c[i]!=1){
cout<<b[i]<<" ";
q=0;
}
}
if(q!=0){
cout<<n;
}
}
4.[GESP202306 三级] 密码合规
题目描述
网站注册需要有用户名和密码,编写程序以检查用户输入密码的有效性。合规的密码应满足以下要求 :。
-
只能由 a∼za∼z 之间 2626 个小写字母、A∼ZA∼Z 之间 2626 个大写字母、0∼90∼9 之间 1010 个数字以及
!@#$
四个特殊字符构成。 -
密码最短长度 :6:6 个字符,密码最大长度 :12:12 个字符。
-
大写字母,小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个。
输入格式
输入一行不含空格的字符串。约定长度不超过 100100。该字符串被英文逗号分隔为多段,作为多组被检测密码。
输出格式
输出若干行,每行输出一组合规的密码。输出顺序以输入先后为序,即先输入则先输出。
输入输出样例
输入 #1复制
seHJ12!@,sjdkffH$123,sdf!@&12HDHa!,123&^YUhg@!
输出 #1复制
seHJ12!@ sjdkffH$123
说明/提示
【样例 1 解释】
输入被英文逗号分为了四组被检测密码:seHJ12!@
、sjdkffH$123
、sdf!@&12HDHa!
、123&^YUhg@!
。其中 sdf!@&12HDHa!
长度超过 12 个字符,不合规;123&^YUhg@!
包含四个特殊字符之外的字符不合规。
AC代码:
#include <iostream>
#include <string>
using namespace std;
bool b[10];
int a[10];
int _end[10],start[10];
bool B3843(int start,int end_,int len,string str) {
bool boo[4] = {0};// here 1
if(len > 12 || len < 6) {
return false;
}
// here 2
for(int i = start + 1; i <= end_; i++) {
if(str[i] >= '0' && str[i] <= '9') {
boo[0] = true;
}
else if(str[i] >= 'A' && str[i] <= 'Z') {
boo[1] = true;
}
else if(str[i] >= 'a' && str[i] <= 'z') {
boo[2] = true;
}
else if(str[i] == '!' || str[i] == '#' || str[i] == '@' || str[i] == '$') {
boo[3] = true;
}
else {
return false;
}
}
if(boo[3] == false) {
return false;
}
if(boo[0] + boo[1] + boo[2] < 2) {
return false;
}
return true;
}
int main() {
string str;
cin >> str;
start[0] = 0;
int sum = 0;
long long len = str.length();
for(int i = 0; i < len; i++) {
if(str[i] == ',') {
_end[sum] = i - 1;
b[sum] = B3843(start[sum],_end[sum],_end[sum] - start[sum] + 1,str);
start[++sum] = i + 1;
}
}
_end[sum] = len - 1;
b[sum] = B3843(start[sum],_end[sum],_end[sum] - start[sum] + 1,str);
for(int i = 0; i <= sum; i++) { // ´Ó0µ½4£¬¹²5¸ö
if(b[i] == true) {
for(int j = start[i]; j <= _end[i]; j++) {
cout << str[j];
}
cout << endl;
}
}
}
5.[GESP202309 三级] 小杨的储蓄
题目描述
小杨共有 �N 个储蓄罐,编号从 00 到 �−1N−1。从第 11 天开始,小杨每天都会往存钱罐里存钱。具体来说,第 �i 天他会挑选一个存钱罐 ��ai,并存入 �i 元钱。过了 �D 天后,他已经忘记每个储蓄罐里都存了多少钱了,你能帮帮他吗?
输入格式
输入 22 行,第一行两个整数 �,�N,D;第二行 �D 个整数,其中第 �i 个整数为 ��ai(保证 0≤��≤�−10≤ai≤N−1)。
每行的各个整数之间用单个空格分隔。
保证 1≤�≤1,0001≤N≤1,000;1≤�≤1,0001≤D≤1,000。
输出格式
输出 �N 个用单个空格隔开的整数,其中第 �i 个整数表示编号为 �−1i−1 的存钱罐中有多少钱(�=1,⋯ ,�i=1,⋯,N)。
输入输出样例
输入 #1
2 3 0 1 0
输出 #1
4 2
输入 #2
3 5 0 0 0 2 0
输出 #2
11 0 4
说明/提示
样例解释 1:
小杨在第 11 天、第 22 天、第 33 天分别向 00 号、 11 号、 00 号存钱罐存了 11 元钱、 22 元钱、 33 元钱,因此 00 号存钱罐有 1+3=41+3=4 元钱,而 11 号存钱罐有 22 元钱。
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,d;
signed main() {
cin>>n>>d;
int s[n]= {0},a;
for(int i=0; i<d; i++) {
cin>>a;
s[a]+=i+1;
}
for(int i=0; i<n; i++) {
cout<<s[i]<<" ";
}
return 0;
}
6.[GESP202309 三级] 进制判断
题目描述
�N 进制数指的是逢 �N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五)。
现在有N个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,15A6F
就只可能是十六进制,而 1011
则是四种进制皆有可能。
输入格式
输入的第一行为一个十进制表示的整数 �N。接下来 �N 行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,可能以 00 开头。保证不会出现空行。
保证 1≤�≤10001≤N≤1000,保证所有字符串长度不超过 1010。
输出格式
输出 �N 行,每行 44 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 11 表示可能,使用 00 表示不可能。
例如,对于只可能是十六进制数的 15A6F
,就需要输出 0 0 0 1
;而对于四者皆有可能的 1011
,则需要输出 1 1 1 1
。
输入输出样例
输入 #1
2 15A6F 1011
输出 #1
0 0 0 1 1 1 1 1
输入 #2
4 1234567 12345678 FF GG
输出 #2
0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0
AC代码:
#include<bits/stdc++.h>
using namespace std;
string str;
int n;
int main(){
cin>>n;
while(n--){
cin>>str;
bool flag[4]={true,true,true,true};
for(int i=0;i<str.size();i++){
if(str[i]>'1'){
flag[0]=false;
}
if(str[i]>'7'){
flag[1]=false;
}
if(str[i]>'9'){
flag[2]=false;
}
if(str[i]>'F'){
flag[3]=false;
}
}
for(int i=0;i<4;i++){
cout<<int(flag[i])<<" ";
}
cout<<endl;
}
return 0;
}
7.[GESP202312 三级] 小猫分鱼
题目描述
海滩上有一堆鱼,�N 只小猫来分。第一只小猫把这堆鱼平均分为 �N 份,多了 �<�i<N 个,这只小猫把多的 �i 个扔入海中,拿走了一份。第二只小猫接着把剩下的鱼平均分成 �N 份,又多了 �i 个,小猫同样把多的 �i 个扔入海中,拿走了一份。第三、第四、……,第 �N 只小猫仍是最终剩下的鱼分成 �N 份,扔掉多了的 �i 个,并拿走一份。
编写程序,输入小猫的数量 �N 以及每次扔到海里的鱼的数量 �i,输出海滩上最少的鱼数,使得每只小猫都可吃到鱼。
例如:两只小猫来分鱼 �=2N=2,每次扔掉鱼的数量为 �=1i=1,为了每只小猫都可吃到鱼,可令第二只小猫需要拿走 11 条鱼,则此时待分配的有 33 条鱼。第一只小猫待分配的鱼有 3∗2+1=73∗2+1=7 条。
输入格式
总共 22 行。第一行一个整数 �N,第二行一个整数 �i。
保证 0<�<100<N<10;�<�i<N 。
输出格式
一行一个整数,表示满足要求的海滩上最少的鱼数。
输入输出样例
输入 #1
2 1
输出 #1
7
输入 #2
3 1
输出 #2
25
说明/提示
样例解释 2
三只小猫来分鱼 �=3N=3,每次扔掉鱼的数量为 �=1i=1,为了每只小猫都可吃到鱼,可令第三只小猫需要拿走 33 条鱼(拿走 11 条和 22 条不满足要求),则此时待分配的有 1010 条鱼。第二只小猫待分配的鱼有 10×3/2+1=1610×3/2+1=16 条。第一只小猫待分配的鱼有 16×3/2+1=2516×3/2+1=25 条。
AC代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,ans;
bool check(int x)
{
for(int i=1;i<=n;i++)
{
x-=m;
if(x<=0||x%n)return false;
x=x/n*(n-1);
}
return true;
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(ans=(n>8)?380000000:1;;ans++)
{
if(check(ans))break;
}
printf("%lld",ans);
return 0;
}
8.[GESP202312 三级] 单位转换
题目描述
小杨这周的数学作业是做单位转换,喜欢编程的小杨决定编程帮他解决这些问题。
小杨只学了长度单位和重量单位,具体来说:
-
长度单位包括千米(
km
)、米(m
)、毫米(mm
),它们之间的关系是:1km=1000m=1000000mm1km=1000m=1000000mm。 -
重量单位包括千克(
kg
)、克(g
)、毫克(mg
),它们之间的关系是:1kg=1000g=1000000mg1kg=1000g=1000000mg。
小杨的作业只涉及将更大的单位转换为更小的单位,也就是说,小杨的作业只会包含如下题型:米转换为毫米,千米转换为毫米,千米转换为米,克转换为毫克,千克转换为毫克,千克转换为克。
现在,请你帮忙完成单位转换的程序。
输入格式
输入的第一行为一个整数,表示题目数量。
接下来 �N 行,每行一个字符串,表示转换单位的题目,格式为 �x 单位 1=?1=? 单位 22。其中,�x 为一个不超过 10001000 的非负整数, 单位 11 和 单位 22 分别为两个单位的英文缩写,保证它们都是长度单位或都是重量单位,且 单位 1 比 单位 2 更大。
例如,如果题目需要你将 1km1km 转换为 mmmm,则输入为 1 km = ? mm
。
保证 1≤�≤10001≤N≤1000。
输出格式
输出 �N 行,依次输出所有题目的答案,输出时,只需要将输入中的 ?? 代入答案,其余部分一字不差地输出即可。由于小杨的题目只涉及将更大的单位转换为更小的单位,并且输入的 �x 是整数,因此答案一定也是整数。
例如,如果题目需要你将 1km1km 转换为 mmmm,则输入为 1 km = ? mm
。则你需要输出 1 km = 1000000 mm
。
输入输出样例
输入 #1
2 1 km = ? mm 1 m = ? mm
输出 #1
1 km = 1000000 mm 1 m = 1000 mm
输入 #2
5 100 m = ? mm 1000 km = ? m 20 kg = ? g 200 g = ? mg 0 kg = ? mg
输出 #2
100 m = 100000 mm 1000 km = 1000000 m 20 kg = 20000 g 200 g = 200000 mg 0 kg = 0 mg
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n;
cin>>n;
while(n--){
int a;
string b,c;
cin>>a>>b>>c>>c>>c;
if(b.length()==1||c.length()==1){
cout<<a<<" "<<b<<" = "<<a*1000<<" "<<c<<endl;
}else{
cout<<a<<" "<<b<<" = "<<a*1000000<<" "<<c<<endl;
}
}
return 0;
}
谢谢大家的关注!!!