UVa11827(欧几里得算法)
2016-03-16 13:02
393 查看
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/F;
关于欧几里得和扩展欧几里得算法请参阅:/article/3719027.html;
题意:题目很简单,给出一组数求两两之间最大的最大公约数;
分析:这道题恶心在不给有多少个数,所以要字符输入,判断到回车时结束。此外,每个数之间空格也不止一个,要判断一下这个空格是要不要记录数据。我的做法是用字符输入,如果是数字就用sum把值记录下来,如果是空格,就判断sum是否为0是就继续循环输入,不是就把sum记录到数组里,在循环。
此外,在结尾的时候还要判断最后一个字符(回车除外)是否是数字,是数字的话就要再记录当前sum不是的话,sum=0就不用记录了;总之,数组内没有得0的值
代码如下:
关于欧几里得和扩展欧几里得算法请参阅:/article/3719027.html;
题意:题目很简单,给出一组数求两两之间最大的最大公约数;
分析:这道题恶心在不给有多少个数,所以要字符输入,判断到回车时结束。此外,每个数之间空格也不止一个,要判断一下这个空格是要不要记录数据。我的做法是用字符输入,如果是数字就用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; }
相关文章推荐
- 「付ける」和「付く」
- 实验三的项目分析
- 复利计算3.0
- 挑战 多重部分和问题
- PrintWriter out=response.getWriter()的问题
- 从零开始搭建 reviewboard 环境(五) -- reviewboard 在linux中的使用
- java线程(3)-多线程死锁
- PHP编码规范与PSR标准
- 如何利用FineBI做财务分析
- python optparse回顾
- R and MongoDB
- Android 5.x 权限问题解决方法
- 如何利用FineBI做财务分析
- iOS SDK蓝牙4.0相关的组件为CoreBluetooth,官方文档翻译
- css切背景图片(background-position)
- ViewPropertyAnimator的使用
- PDE2 three fundamental examples
- gulp之文件合并以及整合html中的script和link
- 有用的java代码
- poj2010 Moo University - Financial Aid