A题
由题意可知,没次循环遍历判定由大面值到小面值进行求解
时间复杂度O(1)
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> int A[7]={100,50,20,10,5,2,1}; int B[6]={50,20,10,5,2,1}; int main(){ long long n; scanf("%lld",&n); while(n--){ long long a[7]={0},b[6]={0},a1,b1; scanf("%lld %lld",&a1,&b1); int i = 0; while(a1){ a[i] = a1/A[i]; a1 = a1%A[i]; i++; } i = 0; while(b1){ b[i] = b1/B[i]; b1 = b1%B[i]; i++; } for(i = 0;i < 7;i++){ printf("%d ",a[i]); } for(i = 0;i < 5;i++){ printf("%d ",b[i]); } printf("%d\n",b[5]); } }
B题
由题意可知分解为n个1那么没次都是(n-1)×1+(n-2)×1+1×1=(n-1)×n/2
时间复杂度O(1)
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> int main(){ long long n,num; scanf("%lld",&num); while(num--){ scanf("%lld",&n); printf("%lld\n",(n-1)*n/2); } }
全部评论
(0) 回帖