Fun With Fractions
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB
Total submit users: 152, Accepted users: 32
Problem 12878 : No special judgement
Problem description

A rational number can be represented as the ratio of two integers, referred to as the numerator (n) and the denominator (d) and written n/d. A rational number's representation is not unique. For example the rational numbers 1/2 and 2/4 are equivalent. A rational number representation is described as "in lowest terms" if the numerator and denominator have no common factors. Thus 1/2 is in lowest terms but 2/4 is not. A rational number can be reduced to lowest terms by dividing by the greatest common divisor of n and d.
Addition of rational
numbers is defined as follows. Note that the right hand side of this equality
will not necessarily be in lowest terms.

A
rational number for which the numerator is greater than or equal to the
denominator can be displayed in mixed format, which includes a whole number part
and a fractional part.
For example, 51/3 is a mixed format representation of
the rational number 16/3. Your task is to write a program that reads a sequence
of rational numbers and displays their sum.

Input

Input will consist of specifications for a series of tests. Information for
each test begins with a line containing a single integer 1 <= n < 1000
indicating how many values follow. A count of zero terminates the input.
The
n following lines each contain a single string with no embedded whitespace .
Each string represents a rational number, which could be in any of the following
forms and will not necessarily be in lowest terms (w, n, and d are integers: 0
<= w,n < 1000, 1 <= d < 1000).
• w,n/d: a mixed number equivalent
to the rational number (w*d + n) / d.
• n/d: a rational number with a zero
whole number part
• w: a whole number with a zero fractional
part

Output

Output should consist of one line for each test comprising the test number
(formatted as shown) followed by a single space and the sum of the input number
sequence. The sum should be displayed in lowest terms using mixed number format.
If either the whole number part or the fractional part is zero, that part should
be omitted. As a special case, if both parts are zero, the value should be
displayed as a single 0.

Sample Input
2
1/2
1/3
3
1/3
2/6
3/9
3
1
2/3
4,5/6
0
Sample Output
Test 1: 5/6
Test 2: 1
Test 3: 6,1/2
Problem Source
HNU Contest 

Mean:

给你n个数,其中包含分数、整数,对这n个数求和。

analyse:

按照题目意思模拟即可,主要考察coding能力.

Time complexity:O(n)

Source code:

//Memory   Time
//  K      MS
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<iomanip>
#include<string>
#include<climits>
#include<cmath>
#define MAX 1005
#define LL long long
using namespace std;
int n,kase=;
int flag[MAX];
char str[MAX][];
void read()
{
   memset(flag,,sizeof(flag));
   for(int i=;i<=n;i++)
   {
       scanf("%s",str[i]);
       int len=strlen(str[i]);
       for(int j=;j<len;j++)
       {
           if(str[i][j]==',')
           {
               flag[i]=;
               break;
           }
           else if(str[i][j]=='/')
           {
               flag[i]=;
               break;
           }
       }
   }
}

int gcd(int a,int b)
{
   if(b==)
       return a;
   else return gcd(b,a%b);
}

int lcm(int a,int b)
{
   int x=gcd(a,b);
   return a*b/x;
}

void solve()
{
   int num;
   int zi=,mu=;
  for(int i=;i<=n;i++)
  {
       int a,b;
      if(flag[i]==)   //  6
      {
          sscanf(str[i],"%d",&num);
          zi+=mu*num;
          continue;
      }
      else if(flag[i]==)    //  6,5/3
      {
          sscanf(str[i],"%d,%d/%d",&num,&a,&b);
          zi+=mu*num;
      }
      else     // 5/3
      {
          sscanf(str[i],"%d/%d",&a,&b);
      }
      int newmu=lcm(mu,b);
      int newa=(newmu/b)*a;
      int newzi=(newmu/mu)*zi;
      zi=newzi+newa;
      mu=newmu;
      if(zi%mu==)
      {
          zi=zi/mu;
          mu=;
          continue;
      }
  }
  zi-=mu;
  if(gcd(zi,mu)!=)
  {
      int tmp=gcd(zi,mu);
      zi/=tmp;
      mu/=tmp;
  }
  if(zi==||mu==)
  {
      puts("0");
      return ;
  }
  if(zi>=mu)
  {
      if(zi%mu==)
      {
          printf("%d\n",zi/mu);
          return ;
      }
      else
      {
          int integer=;
          while(zi>mu)
          {
              zi-=mu,integer++;
          }
          printf("%d,%d/%d\n",integer,zi,mu);
          return ;
      }
  }
  else
   printf("%d/%d\n",zi,mu);
}

int main()
{
//    freopen("cin.txt","r",stdin);
//    freopen("cout.txt","w",stdout);
   while(~scanf("%d",&n),n)
   {
       read();
       printf("Test %d: ",kase++);
       solve();
   }

return ;
}

模拟 --- hdu 12878 : Fun With Fractions的更多相关文章

  1. [模拟] hdu 4452 Running Rabbits

    意甲冠军: 两个人在一个人(1,1),一个人(N,N) 要人人搬家每秒的速度v.而一个s代表移动s左转方向秒 特别值得注意的是假设壁,反弹.改变方向 例如,在(1,1),采取的一个步骤,以左(1,0) ...

  2. [ACM_模拟] HDU 1006 Tick and Tick [时钟间隔角度问题]

    Problem Description The three hands of the clock are rotating every second and meeting each other ma ...

  3. 优先队列 + 模拟 - HDU 5437 Alisha’s Party

    Alisha’s Party Problem's Link Mean: Alisha过生日,有k个朋友来参加聚会,由于空间有限,Alisha每次开门只能让p个人进来,而且带的礼物价值越高就越先进入. ...

  4. HDU题解索引

    HDU 1000 A + B Problem  I/O HDU 1001 Sum Problem  数学 HDU 1002 A + B Problem II  高精度加法 HDU 1003 Maxsu ...

  5. HDU 5912 Fraction 【模拟】 (2016中国大学生程序设计竞赛(长春))

    Fraction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  6. HDU 5102 The K-th Distance(模拟)

    题意:输入一棵树,输出前k小的点对最短距离dis(i,j)的和. 模拟,官方题解说得很清楚了.不重复了. http://bestcoder.hdu.edu.cn/ 需要注意的是,复杂度要O(n+k), ...

  7. hdu 5071(2014鞍山现场赛B题,大模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...

  8. HDU 5510---Bazinga(指针模拟)

    题目链接 http://acm.hdu.edu.cn/search.php?action=listproblem Problem Description Ladies and gentlemen, p ...

  9. HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 解题报告:问一个“M”型可以把一个矩形的平面最多分割成多少块. 输入是有n个“M",现 ...

随机推荐

  1. 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...

  2. 关于Web开发里并发、同步、异步以及事件驱动编程的相关技术

    一.开篇语 我的上篇文章<关于如何提供Web服务端并发效率的异步编程技术>又成为了博客园里“编辑推荐”的文章,这是对我写博客很大的鼓励,也许是被推荐的原因很多童鞋在这篇文章里发表了评论,有 ...

  3. mysqlnd cannot connect to MySQL 4.1+

    phpMyAdmin - error #2000 - mysqlnd cannot connect to MySQL 4.1+ using the old insecure authenticatio ...

  4. 如何在CRM系统中集成ActiveReports最终报表设计器

    有时候,将ActiveReports设计器集成到业务系统中,为用户提供一些自定义的数据表,用户不需要了解如何底层的逻辑关系和后台代码,只需要选择几张关联的数据表,我们会根据用户的选择生成可供用户直接使 ...

  5. Java面向对象思想解决猜拳问题

    第一个面向对象的程序: 一个控制台猜拳小游戏: 第一步选择角色: 第二部选择剪刀,石头,布,与电脑进行PK: 第三部选择继续或者选择结束; 结束显示比赛的局数,以及各自赢得的分数: 设计思路 分析问题 ...

  6. 更新日志 - fir.im Jenkins & Gradle 插件上线

    最近 fir.im 工程师们效率爆表,fir.im 实用工具集合又添加了新的成员-- Jenkins & Gradle 插件,让 App 打包上传更加简单快速. fir.im Jenkins ...

  7. js防止客户端多触发

    代码: /***防止多触发**id 必须唯一*fn 回掉函数*wait 延迟多长时间**使用例子:* ToPreventMoreTrigger('id', function () {//注意 id 是 ...

  8. WPF入门教程系列十二——依赖属性(二)

    二. 依赖属性的优先级 由于WPF 允许我们可以在多个地方设置依赖属性的值,所以我们就必须要用一个标准来保证值的优先级别.比如下面的例子中,我们在三个地方设置了按钮的背景颜色,那么哪一个设置才会是最终 ...

  9. DOM_01之树及遍历

    1.DOM:ECMAScript+DOM+BOM,Document Object Model,核心DOM+HTML DOM+XML DOM: 2.辨析:①HTML:专门编写网页内容的语言:②XHTML ...

  10. JS性能--DOM编程之重排与重绘

    浏览器下载完页面中的所有组件----HTML标记,Js,CSS,图片等之后会解析并生成两个内部数据结构: DOM树  -------- 表示页面结构 渲染树   -------- 表示DOM节点如何显 ...