牛客练习赛23 A、B题题解
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);
}
}