1.ASC(填空题)
76
2.空间(填空题)
分析:1TB=1024GB 1GB=1024MB 1MB=1024KB 1KB=1024B(byte字节) 1B=8b(bits比特位)
所以题解为256*1024*1024*8/32 。
67108864
3.卡片(填空题)
#include<iostream>
using namespace std;
int a[10],x,y,flag;
int main(){
for(int i=1;;i++){
x=i;
while(x){
y=x%10;
a[y]++;
if(a[y]>2021){
flag=1;
break;
}
x/=10;
}
if(flag){
cout<<i-1<<endl;
break;
}
}
return 0;
}//答案为3181
4.相乘(填空题)
#include<iostream>
using namespace std;
int main(){
long long x,flag=1;
for(long long i=1;i<1000000007;i++){
x=i*2021;
if(x%1000000007==999999999){
cout<<i;
flag=0;
break;
}
}
if(flag) cout<<"0";
return 0;
}//答案为17812964
5.路径(填空题)
#include<iostream>
using namespace std;
int dp[2050];
int add(int a,int b){ //求最大公约数
return b?add(b,a%b):a;
}
void adf(int x){
if(x==1){
for(int i=2;i<=22;i++){
dp[i]=x*i/add(x,i);
}
}
else{
for(int i=x+1;i<x+21;i++){
dp[i]=min(dp[i],dp[x]+x*i/add(x,i));
}
dp[x+21]=dp[x]+x*(x+21)/add(x,x+21);
}
}
int main(){
for(int i=1;i<=2021;i++){
adf(i);
}
cout<<dp[2021]<<endl;
return 0;
}//答案为10266837
6.显示
#include<iostream>
#include<cstdio>
using namespace std;
long long x,y,a,b,c;
int main(){
cin>>x;
y=x%(24*60*60*1000);
a=y/(60*60*1000);
b=y%(60*60*1000)/(60*1000);
c=y%(60*1000)/1000;
printf("%.2ld:%.2ld:%.2ld",a,b,c);
return 0;
}
7.最少砝码
分析:其实这题找到规律是非常容易的,
N=1时砝码为1,
N=2~4时砝码为1、3,
N=5~13时砝码为1、3、9,
N=14~40时砝码为1、3、9、27,
N=41~121时砝码为1、3、9、27、81,
..........(以此类推)。
#include<iostream>
#include<cmath>
using namespace std;
long long n,s;
int main(){
cin>>n;
for(int i=0; ;i++){
if(n>s&&n<=s+pow(3,i)){
cout<<i+1<<endl;
break;
}
s+=pow(3,i);
}
return 0;
}
8.杨辉三角形
#include<iostream>//这是我一开始做的发现并不行,只能过一半的测试
#include<cmath>
using namespace std;
int n,a[500000],t,x,s,flag;
int main(){
cin>>n;
if(n==1) cout<<1<<endl;
else{
a[1]=1,a[2]=1,s=3;
for(int i=3; ;i++){
x=1,s++;
for(int j=2;j<=ceil(1.0*i/2);j++){
t=a[j];
a[j]=x+a[j];
x=t;
s++;
if(a[j]==n){
flag=1;
cout<<s<<endl;
break;
}
}
if(flag) break;
s+=i/2;
if(i%2==0) a[i/2+1]=a[i/2];
}
}
return 0;
}
详解:https://blog.csdn.net/weixin_44091134/article/details/116748883
#include<iostream>//正确代码
using namespace std;
int n;
long long C(int a,int b){//求C(a,b)
long long ans=1;
for(int i=a,j=1;j<=b;i--,j++){
ans=ans*i/j;
if(ans>n) return ans;
}
return ans;
}
int add(int k){ //二分法查找
int l=2*k,r=max(l,n);
while(l<r){
int mid=l+(r-l)/2;
if(C(mid,k)<n) l=mid+1;
else r=mid;
}
if(C(l,k)!=n) return 0;
cout<<1ll*l*(l+1)/2+k+1<<endl; //1ll为强制转换类型
return 1;
}
int main(){
cin>>n;
for(int i=16; ;i--){
if(add(i)) break;
}
return 0;
}
9.左孩子右兄弟