信息学奥赛一本通第1059题

1059:求平均年龄


时间限制: 1000 ms         内存限制: 65536 KB
提交数:171357    通过数: 103969

【题目描述】

班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。

【输入】

第一行有一个整数nn(1≤n≤1001≤n≤100),表示学生的人数。其后nn行每行有11个整数,表示每个学生的年龄,取值为1515到2525。

【输出】

输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。

【输入样例】

2
18
17

【输出样例】

17.50
#include <bits/stdc++.h>
using namespace std ;
typedef struct jgt
{
	int n ;
	long long all ;
}jgt ;
jgt a ;

istream& operator>>(istream &in,jgt &a){
	int temp = 0 ;
	in >> a.n ;
	for(int i = 0;i < a.n;i ++){
		in >> temp ;
		a.all += temp ;
	}
	return in ;
}

int main()
{
	cin >> a ;
	printf("%.2f",float(a.all) / float(a.n)) ;
	return 0 ;
}

### 关于信息学奥赛一本1059的解思路 对于信息学奥赛一本中的1059——“数字反转”,该问的核心在于处理整数输入并将其各位上的数字顺序颠倒输出。此过程不仅涉及基本的数据读取与写入操作,还考验了编程者对字符串处理以及算法效率的理解。 #### 数据范围考虑 考虑到数据规模较大(即给定正整数n不超过10亿),因此解决方案需高效运行,在合理时间内完成大数值的操作[^3]。 #### 方法一:利用数学运算实现反转 一种直接的方法是不断提取原数最后一位作为新数的第一位,直到遍历完所有位数为止。具体做法如下: ```cpp #include <iostream> using namespace std; int main() { long n; cin >> n; // 输入待翻转的整数 while (n != 0) { // 当还有剩余未处理的部分时继续循环 cout << n % 10; // 输出当前最低位 n /= 10; // 去掉已处理过的最低位 } return 0; } ``` 这种方法简单易懂,适用于大多数情况下的数字反转需求。然而需要注意的是,如果遇到以零结尾的情况,则这些前导零会被忽略不计;另外还需注意当输入为负数时应单独处理符号位[^4]。 #### 方法二:转换成字符串再逆序打印 另一种方式则是先将整型变量转化为字符形式存储起来,之后按照相反方向依次访问每一位字符来构建新的序列。这种方式可以轻松应对含有前置或后置多个连续相同数字的情形,并且能够保留原始输入中的任何非有效数字部分(比如开头处可能出现的一个或多个人工添加用于测试目的'+'/'-'号)。不过这样做可能会稍微增加一些额外的空间开销[^5]。 ```cpp #include <iostream> #include <string> using namespace std; int main(){ string s; cin>>s; int i=s.size()-1; bool flag=false; if(s[0]=='-'){ cout<<'-'; ++i; flag=true; }else{ ; } for(;i>=flag;i--){ cout<<s[i]; } return 0; } ``` 上述两种方案各有优劣之处,可以根据实际应用场景和个人偏好选择合适的方式去解决问。值得注意的是,在竞赛环境中编写程序时要特别留意边界条件和特殊情况的处理,确保代码具有良好的鲁棒性和用性[^6]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值