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. 关于"是否需要有代码规范"的个人看法

    这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能强求一律,应该允许很多例外. 我擅长制定编码规范,你们听我的 ...

  2. [.NET自我学习]Delegate 泛型

    阅读导航 委托Delegate 泛型 1. 委托Delegate 继承自MulticastDelegate 声明委托定义签名: public delegate int DemoDelegate(int ...

  3. Spring-Context之六:基于Setter方法进行依赖注入

    上文讲了基于构造器进行依赖注入,这里讲解基于Setter方法进行注入.在Java世界中有个约定(Convention),那就是属性的设置和获取的方法名一般是:set+属性名(参数)及get+属性名() ...

  4. 纯js实现复制到剪贴板功能

    在网页上复制文本到剪切板,一般是使用JS+Flash结合的方法,网上有很多相关文章介绍.随着 HTML5 技术的发展,Flash 已经在很多场合不适用了,甚至被屏蔽.本文介绍的一款JS插件,实现了纯J ...

  5. Atitit 图像处理 灰度图片 灰度化的原理与实现

    Atitit 图像处理 灰度图片 灰度化的原理与实现 24位彩色图与8位灰度图 首先要先介绍一下24位彩色图像,在一个24位彩色图像中,每个像素由三个字节表示,通常表示为RGB.通常,许多24位彩色图 ...

  6. fir.im Weekly - 1000 个 Android 开源项目集合

    冬天到了,适宜囤点代码暖暖身.本期 fir.im Weekly 收集了最近一些不错的 GitHub 源码.开发工具和技术实践教程类文章分享给大家. codeKK - 集合近 1000 Android ...

  7. javascript中function 函数递归的陷阱问题

    //看下这个递归方法,最后输出的值function fn(i){ i++; if(i<10){ fn(i); } else{ return i; } } var result = fn(0); ...

  8. WinRAR注册

    新建一个txt文件并命名为"rarreg.key",添加以下内容保存,然后放置在WinRAR安装目录: RAR registration data Federal Agency f ...

  9. WCF传输1-你是否使用过压缩或Json序列化?

    1.当遇到需要传输大量数据时,怎么样传输数据? 2.压缩数据有哪几种常见的方式? 问题1解答:通过压缩来传输数据 问题2解答: (1)WCF自带的压缩方式 (2)自定义WCF binding进行压缩 ...

  10. C#调用Couchbase中的Memcached缓存

    安装服务端 服务端下载地址:http://www.couchbase.com/download 选择适合自己的进行下载安装就可以了,我这里选择的是Win7 64. 服务端安装完后,如果成功了,那么在浏 ...