去年山东省大学生程序设计竞赛的第G题,属于签到题;
签到题的特点当然是题目类型简单,题意也简单,当然,有质量的签到题也稍微有一点的难度;
显然,这道题考的思维;
题目大意是这样的:
摩卡进入大学后努力学习,学校颁发奖学金的规定是学年成绩的平均水平,然后是对于像48/5与29/3这样的小数计算出来的平均分是一样的,因为按照不同标准k输出的后几位小数是不同的
这里题目给出n---科目;
k----输出几位小数;
还有几个科目的成绩,让你计算保留k位小数的数字并且输出。
这个题直接输出是最不可取的,因为你会发现直接输出会输出一个%.kf,直接打印了;
我有两种思路,一是用数组:
当然,1e5太大了,挨个输出并且每次计算除0.1*10^k在存到数组里是很麻烦的一件事,况且很耗时。
这里用第二种方法---模拟除法运算是很简便的;
这道题其实和我男神翁老师出的那道pta的整除光棍是很像的,都是模拟手算除法,所以说:
这个题只要是每计算一位输出在把小数位乘10在相除取余在进入下一次运算就ok了;
当然,签到题出题方应该不会出的太难吧,也希望今年的题不要出的太难吧;
1 #include<bits/stdc++.h>//模拟除法运算 2 using namespace std; 3 const int num=1e5+10; 4 const int INF=0x3f3f3f3f; 5 int n,k; 6 int a[num]; 7 double average; 8 int sum; 9 int main() 10 { 11 std::ios::sync_with_stdio(false); 12 cin>>n>>k; 13 for(int i=1;i<=n;i++) 14 { 15 cin>>a[i]; 16 sum+=a[i]; 17 } 18 printf("%d.",sum/n); 19 int temp=sum%n; 20 for(int i=1;i<=k;i++) 21 { 22 int b=temp*10; 23 int c=b/n; 24 printf("%d",c); 25 temp=b%n; 26 } 27 return 0; 28 }