牛客小白月赛5中H,J题题解

H题

只要使用时间复杂度较低的求最小公倍数办法即可,我使用的是辗转相除法
时间复杂度O(logn)
代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main(){
    unsigned long long a,b,t,num,a1,b1;
    scanf("%llu %llu",&a,&b);
    if(a==b){
        num = a;
    }else{
        if(a<b){
            t = a;
            a = b;
            b = t;
        }
        a1 = a;
        b1 = b;
        while(a%b){
            t = a%b;
            a = b;
            b = t;
        }
        num=a1/b;
        num*=b1;
    }
    printf("%llu\n",num);
}

J题

只要依照顺序将其比对即可
时间复杂度O(1)
代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h> 
int a[24] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23};
int b[24] = {0,10,20,30,40,50,-1,-1,-1,-1, 1,11,21,31,41,51,-1,-1,-1,-1, 2,12,22,32};
int main(){
    int m,n,i;
    scanf("%d:%d",&m,&n);
    i = m;
    while(1){
        if(i==-1){
            i = 23;
        }
        if(i == m){
            if(b[i]<n&&b[i]!=-1){
                break;
            }
        }else{
            if(b[i]!=-1){
                break;
            }
        }
        i--;
    }
    printf("%d:%d\n",a[i],b[i]);
    i  = m;
    while(1){
        i%=24;
        if(i == m){
            if(b[i]>n){
                break;
            }
        }else{
            if(b[i]!=-1){
                break;
            }
        }
        i++;
    }
    printf("%d:%d\n",a[i],b[i]);
}
全部评论
请输入你的观点
点赞 回复 分享
发布于 2018-10-08 20:57

相关推荐

11-26 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
牛客895077908号:佬 什么双非硕啊
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务