|--------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|------|----|---|
| Accepted | P2635 平均年龄 | 1263 | 31 | 6 |
| Accepted | P2636 解密 | 2093 | 26 | 5 |
| Accepted | P2637 数字游戏(number) | 2791 | 9 | 5 |
| Accepted | P2638 寻宝 | 1828 | 26 | 5 |
平均年龄
1000ms 256MB
题目描述
新学期开学了,学校要统计各班同学的年龄,小莹莹班上有若干名学生,现在给出每名学生的年龄(整数),要统计班上所有学生的平均年龄(四舍五入取整)。
输入格式
第一行有一个整数 n(1≤n≤100) ,表示学生的人数。其后 n 行每行有 1 个整数,表示每个学生的年龄,取值为 8 到 25。
输出格式
输出一行,该行包含一个整数,为要求的平均年龄(四舍五入取整)。
样例
输入#1
2
8
10
输出#1
9
题解:
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a;
float s=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a;
s=s+a;
}
s=s/n;
cout<<round(s);
}
解密
1000ms 256MB
题目描述
亶亶最近在学习计算机密码学,密码学是一门古老而又年轻的学问,计算机科学的兴起给密码学注入了新的活力。在网络、通信技术高度发达的今天,计算机安全和保密问题显得越来越重要。菅董在学习过程中遇到了这样一个任务:解密一份被加密过的文件。经过研究,莹萱发现了加密文件有如下加密规律(括号中是一个"原文->密文"的例子)
(1)原文中所有的字符都在字母表中被循环左移了三个位置(dec ->abz)
(2)逆序存储(abcd -> dcba )
(3)字母大小写反转(abXY ->ABxy)
输入格式
一个加密的字符串。(长度大于1且小于50且只包含大小写字母)
输出格式
输出解密后的字符串。
样例
输入#1
Helloworld
输出#1
GOURZROOHk
题解:
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
for(int i=0;i<s.size();i++) //向右移动
{
if((s[i]<='Z'&&s[i]+3>'Z') || (s[i]<='z'&&s[i]+3>'z'))
{
s[i]=s[i]-26;
}
s[i]+=3;
}
string a;
for(int i=0;i<s.size();i++) //逆序+大小写转换
{
char t = s[s.size()-1-i];
if(t>='A'&&t<='Z') t+=32;
else t-=32;
a.push_back(t);
}
cout<<a;
}
数字游戏(number)
1000ms 256MB 展开
题目描述
小莹莹刚学习完约数的知识,一个数的约数指能整除这个数的正整数。周末,小莹莹和几个朋友一起玩耍,刚学习完约数知识的小莹莹迫不及待的想给小朋友们展示一下她的本领,她和几个朋友一起玩起了这样一个游戏:给你一个整数 N,需要算出这个数所有的约数的和。例如 1515 的数有 1,3,5,151,3,5,15。所以 1515 的约数和为 1+3+5+15=241+3+5+15=24。
输入格式
本题有多组数据,第一行一个 T,表示有 T 组数据;
下面 T 行,每行一个正整数 N,表示要处理的数。
输出格式
T 行,每行一个正整数,表示输入中对应的数的约数和。
样例
输入数据#1
1
15
输出数据#1
24
数据范围
- 对于 20%20%的数据,T=1
- 对于 50%50%的数据,T≤5000
- 对于 80%80%的数据,T≤50000
- 对于 100%100% 的数据,T≤500000,N≤5000000。
题解:
cpp
#include <bits/stdc++.h>
using namespace std;
int ddd[5000001];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int t,a;
cin>>t;
for(int i=1;i<=t;i++)
{
cin>>a;
if(ddd[a]!=0)
{
cout<<ddd[a]<<"\n";
}
else
{
long long s=0;
for(int j=1;j*j<=a;j++)
{
if(a%j==0)
{
s+=j;
if(a/j!=j)
{
s+=a/j;
}
}
}
ddd[a]=s;
cout<<s<<"\n";
}
}
}
寻宝
1000ms 256MB 展开
题目描述
小萱萱参加了一个"寻宝"游戏:
在一排均匀排列的树上,被随机放置了一个"宝贝",看谁能以最少的时间找到这个"宝贝"。每一个寻宝的人开始会站在第 N(0≤N≤100000) 棵树边,假设树有 100001100001 棵,"宝贝"被放在第K(0≤K≤100000) 棵树上,寻宝人有两种移动办法------步行和跳跃。假如寻宝人现在在第 X 棵树边,步行每秒可以从第 X 棵树向第 X−1 棵和第 X+1 棵树走去,跳跃可以让她在 11 秒内从第 X 棵树直接跳到第 2X 棵树边(假如他有超能力完成跳跃,跳跃过程中不能超过树的边界)。
现在要求找到"宝贝"需要的最短时间。
输入格式
仅有两个整数 N 和 K。
输出格式
找到"宝贝"的最短时间。
样例
输入数据#1
5 17
输出数据#1
4
题解:
cpp
#include<bits/stdc++.h>
using namespace std;
int mn[1000001];
int main()
{
int n,k;
cin>>n>>k;
if(n>=k)
{
cout<<n-k;
return 0;
}
queue<int>a;
queue<int>b;
a.push(n);
b.push(0);
while(!a.empty()&&!b.empty())
{
int da=a.front();
a.pop();
int db=b.front();
b.pop();
if(da==k)
{
cout<<db<<endl;
return 0;
}
if(da*2<=2*k&&!mn[da*2])
{
mn[da*2]=1;
a.push(da*2);
b.push(db+1);
}
if(da+1<=2*k&&!mn[da+1])
{
mn[da+1]=1;
a.push(da+1);
b.push(db+1);
}
if(da-1>0&&!mn[da-1])
{
mn[da-1]=1;
a.push(da-1);
b.push(db+1);
}
}
}