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

相关文章

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   优点:数据模型自然,编

运用WPS快速整理中英混排的网页文字的方法

朋友从网上下载了一篇技术文档,发现文档中每一行的行末都有一个段落符号,而真正要分段的段首则有4个半角空格,还有许多空段。   想重新编排一下,由于文档比较长,手工操作肯定不行,我向他推荐用WPS文字的“智能格式整理”功能。在该文档处于打开状态时,用鼠标点开“工具”菜单下的“文字工具→智能格式整理”,几秒钟后,所有的段首空格全部消失,段与段之间的空段也全部消除,但每一行行末的段落标记却依然

智能匹配新高度:相亲交友系统如何运用AI技术提升用户体验

在数字化时代,相亲交友系统正逐渐融入人工智能(AI)技术,以提升用户体验和匹配效率。AI的引入不仅改变了传统的交友方式,还为用户带来了更加个性化和精准的交友体验。以下是一篇关于如何运用AI技术提升相亲交友系统用户体验的文章。 智能匹配新高度:相亲交友系统如何运用AI技术提升用户体验 随着人工智能技术的飞速发展,相亲交友系统正迎来一场革命。AI的引入不仅提高了匹配的精准度,还极大地丰富了

编程技巧--位运算的巧妙运用(1)

作者:yunyu5120                这是我的这一系列文章的第一篇,主要讲述我学习过程中积累的一些编程技巧,由于我也是一个初学者,高手莫笑。这一篇主要讲解位运算的基础知识鱼与其简单应用,我主要以C/C++语言讲述,其他语言可以类推。如果你已经对位运算基础和应用十分熟悉,那么本文并不适合你。              我相信还是有一部分人对位运算还不是很了解,我希望你在