题目一
解题思路
关键在于得出公式 (n-i)*(m-j)
代码展示
#include<stdio.h>
long long n,m,i,j;
long long sum,num;
int main()
{
scanf("%lld %lld",&n,&m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(i==j) sum=sum+(n-i)*(m-j);
else num=num+(n-i)*(m-j);
}
}
printf("%lld %lld\n",sum,num);
}
题目二
没有难度
代码展示
#include<stdio.h>
int main()
{
long long n,a,b,c,d,e,f,g,h,i,j;
long long sum=0;
scanf("%lld",&n);
for(a=1; a<=3; a++)
for(b=1; b<=3; b++)
for(c=1; c<=3; c++)
for(d=1; d<=3; d++)
for(e=1; e<=3; e++)
for(f=1; f<=3; f++)
for(g=1; g<=3; g++)
for(h=1; h<=3; h++)
for(i=1; i<=3; i++)
for(j=1; j<=3; j++)
{
if(a+b+c+d+e+f+g+h+i+j==n)
sum++;
}
printf("%lld\n",sum);
if(sum==0)
{
//printf("%lld",sum);
return 0;
}
for(a=1; a<=3; a++)
for(b=1; b<=3; b++)
for(c=1; c<=3; c++)
for(d=1; d<=3; d++)
for(e=1; e<=3; e++)
for(f=1; f<=3; f++)
for(g=1; g<=3; g++)
for(h=1; h<=3; h++)
for(i=1; i<=3; i++)
for(j=1; j<=3; j++)
{
if(a+b+c+d+e+f+g+h+i+j==n)
printf("%lld %lld %lld %lld %lld %lld %lld %lld %lld %lld\n",a,b,c,d,e,f,g,h,i,j);
}
return 0;
}
题目三
解题思路
我用了dfs去找,好像也没啥好讲的
代码展示
#include<stdio.h>
int n,k;
long long ans;
long long a[100];
int is_prime(int x)
{
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
return 0;
}
return 1;
}
void dfs(int f,int sum,int t)//f是步数,sum是总和,t是排列,防止重复
{
if(f==k)
{
if(is_prime(sum))
ans++;
return ;
}
for(int i=t;i<n;i++)
dfs(f+1,sum+a[i],i+1);
return ;
}
int main()
{
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
dfs(0,0,0);
printf("%lld",ans);
return 0;
}