~货物摆放--简单难度
#include <stdio.h>
#include <math.h>
int cnt=0;
long long d[10000],arr[5];
long long n=2021041820210418,j=0;
void dfs(int step){
if(step==4)
{
if(arr[1]*arr[2]*arr[3]==n)
{
cnt++;
}
return;
}
for(int i=0;i<j;i++)
{
arr[step]=d[i];
dfs(step+1);
}
return;
}
int main(void){
for(long long i=1;i<=sqrt(n);i++)
{
if(n%i==0)
{
d[j++]=i;
d[j++]=n/i;
}
}
dfs(1);
printf("%d",cnt);
return 0;
}
九进制转十进制--中等难度
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
//方法1:
//printf("%d",2*9*9*9+0+2*9+2);//最快速的代码,根据位权展开转换
//方法2:
char a[]="2022";
int dec=0;
for(int i=0;i<strlen(a);i++)
{
dec=dec*9+a[i]-'0';
}
printf("%d",dec);
return 0;
}
!求和--困难难度
#include <stdio.h>
int main(int argc, char *argv[])
{
long int a[200000]={0};
long int n=0,i=0,k=0;
scanf("%ld",&n);
long int s=0;
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
//如果用暴力算法会超时
//这里的思路大致就是“a[1]*a[2]"到"a[n]*(a[n-1]+a[n-2]+....+a[1])"求和
for(i=1;i<n;i++){
k+=a[i];
s+=a[i+1]*k;
}
printf("%ld",s);
return 0;
}
/*
//暴力算法超时
int main(int argc, char *argv[])
{
double sum=0;
long long a[1000];
long long n;
scanf("%lld",&n);
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
sum+=a[i]*a[j];
}
}
printf("%.0lf",sum);
return 0;
}
*/