pta题解
习题2.3 数列求和-加强版 (20分)
这道题,要先观察,比如例子是由1+11+111,我们可以看到,个位上是三个1相加,然后十位上是两个1相加,百万是一个1,这就是这道题的关键,就是n为多少,个位就要加多少个a然后逐级递减,同时还要考虑进位,一定要记得进位。
#include<stdio.h>
int main()
{
int a,n,i;
int q[100010];
scanf("%d%d",&a,&n);
if(n==0)
{
printf("0\n");
return 0;
}
int sum,jinwei=0;
for(i=0;i<n;i++)
{
sum=a*(n-i)+jinwei;
q[i]=sum%10;
jinwei=sum/10;
}
if(jinwei>0)
{
q[i]=jinwei;
}
else
i--;
for(;i>=0;i--)
{
printf("%d",q[i]);
}
}
习题2.8 输出全排列 (20分)
这题是求全排列,可以用dfs来解决全排列问题,主要调用递归之后,book要重新赋值为0,来进行下一次排列
#include<stdio.h>
int book[100];
int shu[100];
void dfs(int n,int q)
{
int i,j;
if(q==n)
{
for(i=0;i<n;i++)
{
printf("%d",shu[i]);
}
printf("\n");
return 0;
}
for(j=1;j<=n;j++)
{
if(book[j]==0)
{
book[j]=1;
shu[q]=j;
dfs(n,q+1);
book[j]=0;
}
}
}
int main()
{
int n;
scanf("%d",&n);
dfs(n,0);
}