UVa11827(欧几里得算法)
来源:互联网 发布:淘宝宝贝详情图片素材 编辑:程序博客网 时间:2024/06/05 08:07
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/F;
关于欧几里得和扩展欧几里得算法请参阅:http://blog.csdn.net/qq_27599517/article/details/50888092;
题意:题目很简单,给出一组数求两两之间最大的最大公约数;
分析:这道题恶心在不给有多少个数,所以要字符输入,判断到回车时结束。此外,每个数之间空格也不止一个,要判断一下这个空格是要不要记录数据。我的做法是用字符输入,如果是数字就用sum把值记录下来,如果是空格,就判断sum是否为0是就继续循环输入,不是就把sum记录到数组里,在循环。
此外,在结尾的时候还要判断最后一个字符(回车除外)是否是数字,是数字的话就要再记录当前sum不是的话,sum=0就不用记录了;总之,数组内没有得0的值
代码如下:
#include <set>#include <map>#include <stack>#include <queue>#include <math.h>#include <vector>#include <utility>#include <string>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <functional>using namespace std;long long gcd(long long a,long long b){ if(b==0)return a; return gcd(b,a%b);}int main(){ long long t; cin>>t; getchar(); while(t--){ long long a[1005]; char s; long long k=0; long long sum=0; while(1){ scanf("%c",&s); if(s=='\n'){ break; } else if(s>='0'&&s<='9'){ sum*=10; sum+=(long long)(s-'0'); } else{ if(sum==0)continue; else{// cout<<sum<<" "<<k<<endl; a[k++]=sum; sum=0; } } } if(sum!=0) a[k++]=sum; long long maxx=1; for(long long i=0;i<k;i++) for(long long j=0;j<i;j++){ maxx=max(maxx,gcd(a[i],a[j])); } cout<<maxx<<endl; } return 0;}
1 0
- UVa11827(欧几里得算法)
- uva11827
- Uva11827 (GCD)
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- 欧几里得算法
- Activity之间通信
- arm9+Linux fl2440 下的WiFi驱动rt3070的编译移植以及station模式
- HDU2091
- zTree 异步加载
- Android View的测量
- UVa11827(欧几里得算法)
- 理解Python的With语句
- Unity开发环境大总结
- Boost.thread 同步锁详解
- ViewPropertyAnimator的使用
- 0023-mybatis在mapper.xml文件中的sql语句
- 复杂度问题
- [阿里面试] 阿里社招面试感悟----一名3年工作经验的程序员应该具备的技能
- LeetCode#337. House Robber III