[土狗之路]coursera上C语言基础第七周作业
来源:互联网 发布:sql server 2014 编辑:程序博客网 时间:2024/04/27 20:11
描述
某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理。
输入
共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄。
输出
每个年龄段(分四段:18以下,19-35,36-60,大于60注意看样例输出的格式)的患病人数占总患病人数的比例,以百分比的形式输出,精确到小数点后两位(double)。关于c++的格式化的输入输出,请参考:http://www.cplusplus.com/reference/iomanip。也可以在网上搜索一下,资料很多的。
样例输入
101 11 21 31 41 51 61 71 81 91
样例输出
1-18: 20.00%19-35: 20.00%36-60: 20.00%60-: 40.00%
提示
注意最后一行的输出是“60-: ”,而不是“61-: ”。
每个冒号之后有一个空格。
输出可以用 cout<<fixed<<setprecision(2) << f; 来保留f后面的两位小数。
先说说我最原始解决方案:
#include<iostream>#include <iomanip>using namespace std;int main() {int patient[100];int n;cin >> n;for (int i = 0; i<n; i++) {cin >> patient[i];}double a;double b;double c;double d;a = 0;b = 0;c = 0;d = 0;for (int i = 0; i<n; i++) {if (patient[i] <= 18) {a++;}else if (patient[i] <= 35 && patient[i] >= 19) {b++;}else if (patient[i] <= 60 && patient[i] >= 36) {c++;}else if (patient[i]>60) {d++;}}cout << "1-18: " << fixed << setprecision(2) << a / n * 100 << "%" << endl;cout << "19-35: " << fixed << setprecision(2) << b / n * 100 << "%" << endl;cout << "36-60: " << fixed << setprecision(2) <<c / n * 100 << "%" << endl;cout << "60-: " << fixed << setprecision(2) << d / n * 100 << "%" << endl;return 0;}
再说说改进完的:
#include<iostream>#include <iomanip>using namespace std;int main() {int patient=-1;int n;cin >> n;double a = 0;double b = 0;double c = 0;double d = 0;for (int i = 0; i<n; i++) {cin >> patient;if (patient <= 18)a++;if (patient <= 35 && patient >= 19)b++;if (patient <= 60 && patient >= 36)c++;if (patient>60)d++;}cout << "1-18: " << fixed << setprecision(2) << a / n * 100 << "%" << endl;cout << "19-35: " << fixed << setprecision(2) << b / n * 100 << "%" << endl;cout << "36-60: " << fixed << setprecision(2) <<c / n * 100 << "%" << endl;cout << "60-: " << fixed << setprecision(2) << d / n * 100 << "%" << endl;return 0;}
改进之后,就不需要建立数组了,所以减少了占用内存,而且,所有的年龄段没有交叉点,只用if就可以了,不用多层的IF ELSE
然后说下一题
编程题#3:找出第k大的数
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
注意: 总时间限制: 1000ms 内存限制: 65536kB
描述
用户输入N和K,然后接着输入N个正整数(无序的),程序在不对N个整数排序的情况下,找出第K大的数。注意,第K大的数意味着从大到小排在第K位的数。
输入
N
K
a1 a2 a3 a4 ..... aN
输出
b
样例输入
5232 3 12 5 89
样例输出
32
提示
这是一道很经典的算法问题,是公司面试的常见考题。以后学习递归之后再回头看看这道题,或许有新解法。
#include<iostream>using namespace std;int main() {int n, k;cin >> n >> k;int back;int number[300];int larger;//比当前数据更大的数据的个数,原谅我不会命名for (int i = 0; i < n; i++) {cin >>number[i];//初始化数组}for (int i = 0; i < n; i++) {larger = 0;for (int j = 0; j < n; j++ ) {if (number[j] > number[i]) larger++;if (j == n-1 && larger == k - 1)//前半部分确定已经遍历结束,后半部分表示,第K大数,就应该有K-1个数比他大back = number[i];}}cout << back << endl;return 0;}
因为我没有学递归,所以暂时只写这一种方法。
最后一题
编程题#4:人民币支付
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
注意: 总时间限制: 1000ms 内存限制: 65536kB
描述
从键盘输入一指定金额(以元为单位,如345),然后输出支付该金额的各种面额的人民币数量,显示100元,50元,20元,10元,5元,1元各多少张,要求尽量使用大面额的钞票。
输入
一个小于1000的正整数。
输出
输出分行,每行显示一个整数,从上到下分别表示100元,50元,20元,10元,5元,1元人民币的张数
样例输入
735
样例输出
701110
#include<iostream>using namespace std;int main() {int pay;int a=0;//100int b=0;//50int c=0;//20int d=0;//10int e=0;//5int f=0;//1cin >> pay;a = pay / 100;b = (pay - a * 100) / 50;c = (pay - a * 100 - b * 50) / 20;d = (pay - a * 100 - b * 50 - c * 20) / 10;e = (pay - a * 100 - b * 50 - c * 20 - d * 10)/5;f = pay - a * 100 - b * 50 - c * 20 - d * 10 - e * 5;cout << a << b << c << d << e << f<<endl;return 0;}
后来度娘之后发现自己做的有点蠢,发一个别人先进方法:
#include<iostream> using namespace std; int main() { int sum; int a[6] = { 0 };//a[0]:100,a[1]:50,a[2]:20,a[3]:10,a[4]:5,a[5]:1; cin >> sum; int piao[6] = {100,50,20,10,5,1}; for (int i = 0; i < 6; i++) { a[i] = sum / piao[i]; sum = sum % piao[i]; cout << a[i] << endl; } return 0; }
最后说说今天写这篇日志的心得,一道题目的解决方案有很多,如何才能让程序简单易懂,才是真正好坏程序猿之间的区别,虽然我这只土狗才接触编程不久,但是这些作业让我思考问题,会在我未来的学习之路上有所助力
- [土狗之路]coursera上C语言基础第七周作业
- [土狗之路]coursera上C语言进阶第二周作业
- [土狗之路]coursera C语言基础12周(期末考试)作业
- [土狗之路]coursera上C++基础第10周作业(下)
- [土狗之路]Coursera C++第10周作业(上)
- [土狗之路]coursera上C语言进阶习题 括号匹配
- [土狗之路]coursera C语言进阶 习题 寻找平面上的极大点
- [土狗之路]coursera 上面C++第8周作业
- [土狗之路]coursera C语言进阶练习题 排队游戏
- [土狗之路]coursera C语言进阶习题 文字排版
- [土狗之路]coursera C语言进阶 习题 分配病房
- [土狗之路]coursera C语言进阶 习题 寻找山顶
- [Coursera 计算导论与C语言基础] 第七周作业
- [土狗之路]coursera 与 oj上的递归练习作业-- 单词翻转 角谷猜想
- [土狗之路]coursera C语言进阶习题 计算矩阵边缘元素之和
- [土狗之路]coursera C语言进阶习题 二维数组右上左下遍历
- [土狗之路]coursera C语言进阶 习题 配对碱基链
- [土狗之路]coursera C语言进阶 习题 含k个3的数
- 文章标题
- iOS原生地图开发指南2
- ANN 学习
- PAT程序设计考题——甲级1005 数字按位累加(非负数字按位累加和转化成对应英文单词)
- 一些计算机词汇的简单解说
- [土狗之路]coursera上C语言基础第七周作业
- 方差和偏差 与 过拟合和欠拟合
- ElasticSearch学习笔记
- Linux if 语法
- Objective-C的description方法
- 折半查找判定树及平均查找长度
- linux oracle jdbc遇到的问题记录
- JVM虚拟机结构
- iOS开发侧边栏