Description
在二进制系统里面,只有2个没有重复数字的正整数:1、10;在三进制系统里面有10个这样的正整数,即:1、2、10、12、20、21、102、120、201、210;编写程序求出N进制中具有上述性质的正整数个数,1 <N<=12
Input
三个以下数据:
表示进制的整数N
Output
符合要求的数的个数,数与数之间用空格隔开
Sample Input
2 3 4
Sample Output
2 10 48
这题比较有趣,看似是有关进制的算法问题,实际上把它想成一个排列问题就简单多了。具体算法如下:
#include<stdio.h>
int fun(int n)
{
int i,sum=1;
for(i=1;i<=n;i++)
{
sum*=i;
}
return sum;
}
int main()
{
int n,j,i,sum=0;
for(i=0;i<3;i++)
{
sum=0;
scanf("%d",&n);
for(j=0;j<n;j++)
{
sum+=fun(n-1)/fun(n-1-j);
}
printf("%d ",sum*(n-1));
}
return 0;
}
觉得不错,请点个赞,谢谢。