牛客小白月赛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]); }