7-35 有理数均值 栈的运用

2024-01-06 10:08
文章标签 均值 运用 35 有理数

本文主要是介绍7-35 有理数均值 栈的运用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述
本题要求编写程序,计算N个有理数的平均值。

输入格式:
输入第一行给出正整数N(≤100);第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。

输出格式:
在一行中按照a/b的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

输入样例1:
4
1/2 1/6 3/6 -5/10
输出样例1:
1/6
输入样例2:
2
4/3 2/3
输出样例2:
1

错误代码

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stack>
using namespace std;void divide(int& up, int& low)
{int i = 2;while (true){if (up % i == 0 && low % i == 0){up = up / i;low = low / i;continue;}i++;if (up >= low){if (i > up){break;}}else {if (i > low){break;}}}
}
void Toghter(int a,int b,int c,int d,stack<int>& up1,stack<int>& low1)
{int up,low;if(b!=d){a = a*d;c = c*b;b = b*d;d = b;
//		a = a*d;分子在前先化 
//		c = c*b;up = a+c;low = b;divide(up,low);}else{up = a+c;low = b;divide(up,low);}up1.push(up);low1.push(low);
}int main()
{int N;cin >> N;stack<int> up;stack<int> low;int preup;int prelow;int son;int mother;for (int i = 0; i < N; i++){scanf("%d/%d", &preup, &prelow);//cin貌似不能像scanf一样cin>>'/' up.push(preup);low.push(prelow);}while(up.size()!=1){preup = up.top();prelow = low.top();up.pop();low.pop();son = up.top();mother = low.top();Toghter(preup,prelow,son,mother,up,low); 	}preup = up.top();prelow = low.top()/N;divide(preup,prelow);if(prelow==1){cout<<preup;}else{cout<<preup<<"/"<<prelow;}
}

问题分析

  1. 思路一:是先将他们全部相加再化简,但是PTA提示最大N运行超时,且若不随时化简,则会溢出
  2. 思路二:用STL的栈容器储存分数,再两两相加,当容器的size()为1时则退出循环,但是这样仍然提示若不随时化简,则会溢出
  3. 思路三:看了一些大佬的代码,必须拿到分数后就立即化简,再两两相加,这样测试点就全部通过了

正确代码:

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stack>
using namespace std;void divide(int& up, int& low)
{int i = 2;while (true){if (up % i == 0 && low % i == 0){up = up / i;low = low / i;continue;}i++;if (up >= low){if (i > up){break;}}else {if (i > low){break;}}}
}
void Toghter(int a, int b, int c, int d, stack<int>& up1, stack<int>& low1)
{int up, low;if (b != d){a = a * d;c = c * b;b = b * d;d = b;//		a = a*d;分子在前先化 //		c = c*b;up = a + c;low = b;divide(up, low);}else {up = a + c;low = b;divide(up, low);}up1.push(up);low1.push(low);
}
int main()
{int N;cin >> N;stack<int> up;stack<int> low;int preup;int prelow;int son;int mother;for (int i = 0; i < N; i++){scanf("%d/%d", &preup, &prelow);//cin貌似不能像scanf一样cin>>'/' up.push(preup);low.push(prelow);}while (up.size() != 1){preup = up.top();prelow = low.top();divide(preup, prelow);up.pop();low.pop();son = up.top();mother = low.top();divide(son, mother);up.pop();low.pop();Toghter(preup, prelow, son, mother, up, low);}preup = up.top();prelow = low.top()* N;divide(preup, prelow);if (prelow == 1){cout << preup;}else {cout << preup << "/" << prelow;}
}

总结:

  1. cin函数好像不能像scanf一样写cin>>"/"这样写会抱错,或许有这种写法但我才疏学浅还不知道如何写
  2. 这种占用内存不定的数组最好用STL容器存储

这篇关于7-35 有理数均值 栈的运用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576006

相关文章

Swagger在java中的运用及常见问题解决

《Swagger在java中的运用及常见问题解决》Swagger插件是一款深受Java开发者喜爱的工具,它在前后端分离的开发模式下发挥着重要作用,:本文主要介绍Swagger在java中的运用及常... 目录前言1. Swagger 的主要功能1.1 交互式 API 文档1.2 客户端 SDK 生成1.3

CSS引入方式和选择符的讲解和运用小结

《CSS引入方式和选择符的讲解和运用小结》CSS即层叠样式表,是一种用于描述网页文档(如HTML或XML)外观和格式的样式表语言,它主要用于将网页内容的呈现(外观)和结构(内容)分离,从而实现... 目录一、前言二、css 是什么三、CSS 引入方式1、行内样式2、内部样式表3、链入外部样式表四、CSS 选

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

poj 2431 poj 3253 优先队列的运用

poj 2431: 题意: 一条路起点为0, 终点为l。 卡车初始时在0点,并且有p升油,假设油箱无限大。 给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。 问最少加几次油可以到达终点,若不能到达,输出-1。 解析: 《挑战程序设计竞赛》: “在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一

『功能项目』战士的平A特效【35】

我们打开上一篇34武器的切换实例的项目, 本章要做的事情是在战士的每次按A键时在指定位置生成一个平A特效 首先将之前下载的技能拖拽至场景中 完全解压缩后重命名为AEffect 拖拽至预制体文件夹 进入主角动画的战士动画层级 双击第一次攻击 选择Animation 创建事件 创建的动画事件帧放在攻击动画挥剑指定处 命名为PerpetualAtt

ElasticSearch 6.1.1运用代码添加索引及其添加,修改,删除文档

1、新建一个MAVEN项目:ElasticSearchTest 2、修改pom.xml文件内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or

巧妙的运用Floyd算法

题目大概意思:输入n,m,n代表n个点,接着输入n个点之间的距离(n*n的矩阵),接下来m次询问,输入a,b,c如果a,b之间的最短路径中存在c点则输出Yes,否则输出No 比赛的时候没有做出来,赛后帆哥一点播就知道了。。。。我写的时候直接用floy算法求距离并记录路径。。然后TLE到死。。。我就奇怪了数据n,m都小于100,怎么会TLE啊。。。坑爹啊。。。我一直怀疑是不是用别的算法。。。。。帆

【kubernetes】配置管理中心Configmap运用

一,介绍 Configmap(简写 cm)是k8s中的资源对象,用于保存非机密性的配置的,数据可以用key/value键值对的形式保存,也可通过文件的形式保存。 【局限性】:在ConfigMap不是用来保存大量数据的,其数据量不可超过1 MiB。 kubectl get cm 二,功能 Configmap资源对象,可以有一个或者多个Configmap,通过 volume 形式映射到容器

NoSQL数据库的35个应用场景

现在我们站在各个用例的角度上来考虑那种系统适合于这些用例。   你的意见是?   首先,我们要纵览各种数据模型。这些模型的分类方法来自于Emil Eifrem和NoSQL databases。   文档数据库   源起:受Lotus Notes启发。   数据模型:包含了key-value的文档集合   例子:CouchDB, MongoDB   优点:数据模型自然,编