zoukankan      html  css  js  c++  java
  • HDU 5912 Fraction

    题目来源:2016 CCPC 长春站
    题意:青蛙先生想计算一个式子的值,输入两个数列a[],b[]求出最后的分子和分母

    思路:一开始看到这个图片首先想到的是递归实现,递归部分始终计算的是右下部分

    /*************************************************************************
        > File Name: A.cpp
        > Author:    WArobot 
        > Mail:      768059009@qq.com 
        > Created Time: 2017年04月15日 星期六 21时10分45秒
     ************************************************************************/
    
    #include<bits/stdc++.h>
    #include<cstdio>
    using namespace std;
    
    long long n,a[100],b[100];
    long long p,q;
    void fun(long long  step,long long z,long long m){
    	long long t1 = m*b[step-1] , t2 = m*a[step-1]+z;
    	if(step==1)	{
    		p = t1 ;	q = t2 ;
    		return;
    	}
    	fun(step-1, t1 , t2 );
    }
    int gcd(long long  a,long long  b){
    	return b==0?a:gcd(b,a%b);
    }
    int main(){
    	int t,kase = 0;
    	scanf("%d",&t);
    	while(t--){
    		scanf("%lld",&n);
    		for(int i=0;i<n;i++)	scanf("%lld",a+i);
    		for(int i=0;i<n;i++)	scanf("%lld",b+i);
    		p = q = 0;
    		if(n<=1)	p = b[0] , q = a[0];
    		else		fun(n-1,b[n-1],a[n-1]);
    		int d = gcd(p,q);
    		if(d!=0){
    			p /= d;  q /= d;
    		}
    		printf("Case #%d: %lld %lld
    ",++kase,p,q);
    	}
    	return 0;
    }
    

    后来一想为啥非得要用递归做......

    /*************************************************************************
        > File Name: A2.cpp
        > Author:    WArobot 
        > Mail:      768059009@qq.com 
        > Created Time: 2017年04月16日 星期日 20时35分55秒
     ************************************************************************/
    
    #include<bits/stdc++.h>
    using namespace std;
    
    int t , kase = 0 , n;
    int a[100] , b[100];
    int p,q;  // p为分子 q为分母
    int gcd(int a,int b){
    	return b==0?a:gcd(b,a%b);
    }
    void solve(){
    	p = b[n-1] , q = a[n-1];
    	for(int i=n-2;i>=0;i--){
    		int t1 = p , t2 = q;
    		p = t2*b[i];
    		q = t2*a[i] + t1;
    	}
    	int d = gcd(p,q);
    	p /= d; q /= d;
    }
    int main(){	
    	int kase = 0;
    	scanf("%d",&t);
    	while(t--){
    		scanf("%d",&n);
    		for(int i=0;i<n;i++) scanf("%d",a+i);
    		for(int i=0;i<n;i++) scanf("%d",b+i);
    		solve();
    		printf("Case #%d: %d %d
    ",++kase,p,q);
    	}
    	return 0;
    }
    

  • 相关阅读:
    php -- 读取大文件
    php header函数下载文件实现代码
    HTTP HEADER 详解
    linux -- 进程管理和作业控制
    linux -- at命令
    Binary String Matching
    括号匹配
    ASCII码排序
    快捷键
    ubuntu14的unity desktop显示异常
  • 原文地址:https://www.cnblogs.com/WArobot/p/6722683.html
Copyright © 2011-2022 走看看