• HDU1014


    求最大公约数:

    欧几里得(Euclid)算法

    又称辗转相除法,依据定理gcd(a,b)=gcd(b,a%b)

    实现过程演示: sample:gcd(15,10)=gcd(10,5)=gcd(5,0)=5

    C语言实现:

    1 int Euclid_GCD(int a, int b)
    2 {
    3     return b?Euclid_GCD(b, a%b):a;
    4 }


    自己最开始想的是把可以得到的存在一个数组里,然后0-MOD-1挨个判断都在数组里则是GOOD CHOICE,但是当两数比较大时结果均出错,就改了数组大小改着改着还是改不对,于是百度发现可以直接最大公约数求。以后这种很简单的题做起来很麻烦的话尽量先多写几组实例挨个试找规律。
    自己代码:

    #include<iostream>
    using namespace std;
    int main(void){
    int m,n;
    while(scanf("%d%d",&m,&n)!=EOF){
    printf("%10d%10d",m,n);
    int a[1000],s=2;
    a[0]=0,a[1]=m;
    for(int i=1;i<1000;i++){
    a[i+1]=(a[i]+m)%n;
    if(a[i+1]==0) break;
    else s++;
    }

    int w=0;
    for(int i=0;i<n;i++)
    for(int j=0;j<s;j++){
    //怎么判断一个数组包含另一个数组所有数
    if (i == a[j]) {
    w++;
    continue;
    }
    }
    //printf("%d",w);
    if(w==n) printf(" Good Choice ");
    else
    printf(" Bad Choice ");

    }
    return 0;
    }

    AC 代码:

    #include<iostream>
    using namespace std;
    int gcd(int a,int b){
    return b?gcd(b,a%b):a;
    }
    int main(void){
    int s,m;
    while(~scanf("%d%d",&s,&m))
    {
    if(gcd(s,m)==1) printf("%10d%10d Good Choice ",s,m);
    else printf("%10d%10d Bad Choice ",s,m);
    }
    return 0;
    }

    无语不知道怎么改只能贴在这了

  • 相关阅读:
    Subversion版本控制系统的安装和操作.
    java基础
    iOS_第3方类库MBprogressHUD
    wikioi 1396 伸展树(两个模板)
    从乐视和小米“最火电视”之战 看PR传播策略
    Android开发之大位图压缩水印处理
    Spark SQL with Hive
    PHP设计模式——模板模式
    Nginx 配置 gzip 压缩
    SecureCRT学习之道:SecureCRT 经常使用技巧
  • 原文地址:https://www.cnblogs.com/slay/p/10440318.html
Copyright © 2020-2023  润新知