PATA-Exercise No.2
来源:互联网 发布:聪明坏处 知乎 编辑:程序博客网 时间:2024/06/04 20:06
PAT甲级练习02
题目:PAT1002
普通思路版:
20170623于华东交通大学
#include<iostream>#include<iomanip>int main() { int a = 0;//第一个多项式的项数 int b = 0;//第二个多项式的项数 std::cin >> a; double* a_1 = new double[a];//存储第一个多项式的指数 double* a_2 = new double[a];//存储第一个多项式的系数 for (size_t i = 0; i < a; i++) { std::cin >> a_1[i] >> a_2[i]; } std::cin >> b; double* b_1 = new double[b];//存储第二个多项式的指数 double* b_2 = new double[b];//存储第二个多项式的系数 for (size_t i = 0; i < b; i++) { std::cin >> b_1[i] >> b_2[i]; } //for (size_t i = 0; i < a; i++) //{ // std::cout << a_1[i] << std::endl;; //} //for (size_t i = 0; i < b; i++) //{ // std::cout << b_1[i] << std::endl; //} double** sum=new double*[a+b] ;//二维数组存储结果 for (size_t i = 0; i < a+b; i++) { sum[i] = new double[2]; } size_t sum_k = 0;//结果多项式中有多少项 size_t a_i = 0;//当前a多项式中已处理到第几项 size_t b_i= 0;//当前b多项式中已处理到第几项 bool a_finish = false;//标识a是否被扫描完成 bool b_finish = false;//标识b是否被扫描完成 do { bool a_deal = false;//标志a中当前项是否被处理 bool b_deal = false;//标志b中当前项是否被处理 if (a_finish) { sum[sum_k][0] = b_1[b_i]; sum[sum_k][1] = b_2[b_i]; sum_k++; b_deal = true; } else if (b_finish) { sum[sum_k][0] = a_1[a_i]; sum[sum_k][1] = a_2[a_i]; sum_k++; a_deal = true; } else { if (a_1[a_i]>b_1[b_i]) { sum[sum_k][0] = a_1[a_i]; sum[sum_k][1] = a_2[a_i]; sum_k++; a_deal = true; } else if (a_1[a_i] == b_1[b_i]) { sum[sum_k][0] = a_1[a_i]; sum[sum_k][1] = a_2[a_i] + b_2[b_i]; sum_k++; a_deal = true; b_deal = true; } else { sum[sum_k][0] = b_1[b_i]; sum[sum_k][1] = b_2[b_i]; sum_k++; b_deal = true; } } //处理了就换下一个 if (a_deal) { a_i++; if (a_i==a) { a_finish = true; } } if (b_deal) { b_i++; if (b_i==b) { b_finish = true; } } } while ((!a_finish)||(!b_finish)); std::cout << sum_k << " "; for (size_t ii = 0; ii < sum_k; ii++) { std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(0) << sum[ii][0] << " " << std::setiosflags(std::ios::fixed) << std::setprecision(1) << sum[ii][1] ; if (ii!=(sum_k -1)) { std::cout << " "; } } /*system("pause");*/ return 0;}
满分通过版:
20170816于华东交通大学
#include <iostream>#include<iomanip>#include <cstdio>using namespace std;int main() { float c[1001] = { 0 }; int m, n, t; /*int nonzero_item_num = 0;*/ float num; cin >> m; //nonzero_item_num = m; for (int i = 0; i < m; i++) { cin >> t >> num; c[t] += num; } cin >> n; for (int i = 0; i < n; i++) { cin >> t >> num; /*if (c[t]==0.0) { ++nonzero_item_num; }*/ c[t] += num; } /*int cnt = nonzero_item_num;*/ int cnt = 0; for (int i = 0; i < 1001; i++) { if (c[i] != 0) cnt++; } cout << cnt; if (cnt != 0) { for (int i = 1000; i >= 0; i--) { if (c[i] != 0.0 && cnt > 0) { /*printf("%d %.1f", i, c[i]);*/ cout.setf(ios::fixed); cout <<" "<< i << " " << setprecision(1) << c[i]; cnt--; } } } return 0;}
终于发现问题出在哪了。上一版本是思路不对,现在再采用这个版本的之后,学习到了两点:
判断结果多项式中非0项有多少个不应在计算的过程中判断,因为计算过程会导致三种情况。非0->0、非0->非0、0->非0。所以不方便判断是否为新增项。
cout.setf(ios::fixed) 和 setprecision(1) 连用可用于设置保留几位小数。
阅读全文
0 0
- PATA-Exercise No.2
- PATA-Exercise No.1
- pata 1008
- Exercise of Thread(2)
- Exercise 2-3
- Python Exercise #2
- Exercise 2: Linear Regression
- Exercise 2: Linear Regression
- Exercise 2-8.
- Exercise(19):排列2
- 37-1-2-exercise
- 38-2- lesson exercise
- Exercise 2.2-2
- Exercise
- exercise
- Exercise
- exercise
- APUE.2e exercise 6.3
- Thinkphp文件上传
- 浅析Linux 内核空间和用户空间
- Rust: 在子线程启动子线程
- PHP开发环境
- gb2312中的英文字母占几个字节?
- PATA-Exercise No.2
- 【AOJ 859】地毯填补问题(分治)
- django自定义模板过滤器时间戳实例(python)
- 自定义view进度条ColorSeekBar
- python+selenium+phantomjs 踩坑
- 新的起点,开启UE4的学习之路!
- Python的Pexpect模块详解
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- iptables