NYOJ 题目1013 除法表达式(数学)

来源:互联网 发布:vb.net 字符串包含 编辑:程序博客网 时间:2024/06/13 23:46

除法表达式

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

    给出一个这样的除法表达式:X1/X2/X3/···/Xk,其中Xi是正整数。除法表达式应当按照从左到右的顺序求和,例如表达式1/2/1/2的值为1/4。但是可以在表达式中嵌入括号以改变计算顺序,例如表达式(1/2)/(1/2)的值为1.


输入
首先输入一个N,表示有N组测试数据,
每组数据输入占一行,为一个除法表达式,
输入保证合法。
使表达式的值为整数。k<=10000,Xi<=100000000.
输出
输出YES或NO
样例输入
11/2/1/2
样例输出
YES
来源
爱生活
上传者
TCM_张鹏
思路:第一个数一定是分子,第二个数一定是分母,后边其他的数都可以通过加不加括号,变成分子或分母,只要找到有个数能把第二个数消成1就行了
ac代码
#include<stdio.h>#include<string.h>#include<stdlib.h>char s[1000005];int a[1000005];int gcd(int a,int b){if(a<b){int t=a;a=b;b=t;}if(b==0)return a;elsereturn gcd(b,a%b);}int main(){int t;scanf("%d",&t);while(t--){char *p;int m,n,j=0,i;int ans;scanf("%s",s);p=strtok(s,"/");a[j++]=atoi(p);while(p){p=strtok(NULL,"/");if(p==NULL)break;a[j++]=atoi(p);}ans=a[1]/gcd(a[0],a[1]);for(i=2;i<j;i++){ans=ans/gcd(ans,a[i]);if(ans==1)break;}if(ans==1)printf("YES\n");elseprintf("NO\n");}}


0 0
原创粉丝点击