杭电oj的2023
来源:互联网 发布:道奇垂耳兔 知乎 编辑:程序博客网 时间:2024/04/30 03:20
离上次更新过去了很久很久了,也正式的从一名大一的萌新变成了一个大二的老油条,技术方面依旧很菜啊,真的还要提高。转专业成功啦!但是还有很多手续和很长的路要走。。。前端写的不怎么样,还是要好好学JS,C语言因为要给学弟学妹们培训的原因也不得不捡起来了,不过好好学习总是没错的!也希望自己能够成为一个大佬略略略
回归正题:杭电oj上的2023(在很多年以前写过但是没能收尾的题)
Problem Description
假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
Input
输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。
Output
对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。
Sample Input
2 2
5 10
10 20
Sample Output
7.50 15.00
7.50 15.00
1
嗯!现在开始分析啦!
首先最开始的一个错误是因为没有最后面一行的尾部空行问题 一直以为加一个\n 就可以解决了 但是 千万不要忽略了 要求是每个测试实例后面跟一个空行。
好的我现在说一下我当时第二次改动之后的源码(有错误的版本)
#include<stdio.h>int main(){ int m, n, i, j, sum2, flag; while (~scanf("%d%d", &m, &n)) { sum2 = 0; float sum[60] = { 0 }, sum1[60] = {0}, a[60][60]; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%f", &a[i][j]); sum[j] += a[i][j]; sum1[i] += a[i][j]; } } for (i = 0; i < m-1; i++) printf("%.2f ", sum1[i] / n); printf("%.2f\n", sum1[i] / n); for (i = 0; i < n-1; i++) { sum[i] = (sum[i] / m); printf("%.2f ", sum[i]); } sum[i] = (sum[i] / m); printf("%.2f\n", sum[i]); for (i = 0; i < m; i++) { flag = 0; for (j = 0; j < n; j++) { if (a[i][j] >= sum[j]) flag++; } if (flag == n) sum2++; } printf("%d\n\n", sum2); } return 0;}
大家有没有发现什么问题呢? 没有的不着急 再看一下正确通过的源码
这个是更正完之后的AC版本 当时很不明白为什么代码一直不能过 但是现在一看似乎原因很清晰(总算知道为什么不能过了/哭泣脸)
#include<stdio.h>int main(){ int m, n, i, j, sum2, flag; while (~scanf("%d%d", &m, &n)) { sum2 = 0; double sum[60] = { 0 }, sum1[60] = {0}, a[60][60]; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%lf", &a[i][j]); sum[j] += a[i][j]; sum1[i] += a[i][j]; } } for (i = 0; i < m-1; i++) printf("%.2lf ", sum1[i] / n); printf("%.2lf\n", sum1[i] / n); for (i = 0; i < n-1; i++) { sum[i] = (sum[i] / m); printf("%.2lf ", sum[i]); } sum[i] = (sum[i] / m); printf("%.2lf\n", sum[i]); for (i = 0; i < m; i++) { flag = 0; for (j = 0; j < n; j++) { if (a[i][j] >= sum[j]) flag++; } if (flag == n) sum2++; } printf("%d\n\n", sum2); } return 0;}
眼尖的你们肯定有看到!!!没错就是单精度与双精度的问题!!!
在这道题里面 必须要用双精度的类型 单精度是不够精确的 每耗费时间做一些这种题老能发现自己的一堆小错误。。。
还好还是在刷题 要是写一些重要的代码可能会gg吧 加油 虽然本来就笨一些 :)但还是要勤快
- 杭电oj的2023
- 杭电oj编码2023
- 杭电OJ 2018 母牛的故事
- 杭电oj 1870-愚人节的礼物
- 杭电oj 2206 IP的计算
- 杭电oj 2018 母牛的故事
- 杭电OJ--2099 整除的尾数
- 杭电oj 2500 HDU的输出
- 杭电oj 2017 字符串的统计
- 杭电oj 2018 母牛的故事
- 【杭电-oj】-2018-母牛的故事
- 杭电 OJ 最简单的计算机
- 杭电 OJ 1408 盐水的故事
- 杭电oj 1075 map的使用
- 杭电oj分类
- 杭电oj
- 杭电OJ 2054
- 杭电OJ 1028
- STM32F10在iap和app模式下,调试模式串口可以通信,下载后却不能通信的问题
- unity学习——值类型和引用类型
- git命令
- 七个结构型模式5:外观模式-Facade Pattern【学习难度:★☆☆☆☆,使用频率:★★★★★】
- NYOJ 33
- 杭电oj的2023
- 关于const修饰的问题【转载】
- IIS伪静态配置的坑
- iOS 使点击事件穿透透明的UIView
- 关于docker挂载文件的生效问题的解决
- JavaScript基础之JQuery与AJAX
- JavaWeb之Cookie
- sublime text3 安装、配置sftp插件
- Python3 安装 pip3 出现的问题及解决方案