回 帖 发 新 帖 刷新版面

主题:第72次比赛题目

[size=3]偶最近没有多少时间,只好偷一下懒了,用一题最近偶研究过的一个水题。。。

虽然的确挺水,但也想看看大家有什么方法优化

[color=0000FF]题目描述:[/color]
K进制的水仙花数定义:K进制下,一个大于一位的正整数,
各位上的数字的n次方的和,恰好等于它本身,找出所有的解

[color=0000FF]输入:[/color]
仅一行,分别为正整数n,k, 其中1<n<30,1<k<=36

[color=0000FF]输出:[/color]
输出所有的解,以k进制输出,一个解一行,10进制以上各位数值使用小写a-z表示

[color=0000FF]样例输入:[/color]
3 10

[color=0000FF]样例输出:[/color]
370
407
153
371

[color=0000FF]其它:[/color]
注意,输出结果不需要排序
结束时间,9月20日晚23:00

主要评比内容:正确性、时间效率、空间效率[/size]

回复列表 (共12个回复)

11 楼

/*此程序只能数十进制以下的数,原因是没考虑字母*/
#include "stdio.h"
#include "math.h"
void main()
{
    int i,j,m=0,n,k,b,a[10];
    long sum1=0,sum2=0;
    scanf("%d,%d",&n,&k);
    for(;;)
    {
        for(i=1;i<k;i++)
        {
            sum2+=1;
            sum1=sum1+pow(i,n);
            sum1-=pow(i-1,n);
            if(sum1==sum2)
        {
            for(j=0,b=sum1;b;b/=k,j++)
            a[j]=b%k;
            for(;j;j--)
        printf("%d",a[j-1]);
        printf("\n");
        break;
        }
        
        //if(sum1<sum2)
        //break;
        }
        //if(sum1<sum2)
        //break;
        if(sum2>k*pow(k-1,n)&&pow(2,16))
        break;
        sum1=0;
        sum2+=1;
        for(b=sum2;b;b/=k)
        sum1+=(long)pow(b%k,n);
        if(sum1==sum2)
        {
            for(j=0,b=sum1;b;b/=k,j++)
            a[j]=b%k;
        for(;j;j--)
        printf("%d",a[j-1]);
        printf("\n");
        }
        
    }
}

12 楼

不得不支持~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册