zoj1095 Humble Numbers(2)

本文通过预计算的方式解决了一个特定的编程挑战,即快速找出指定序号的谦数。使用C语言实现,通过不断更新最小值的方式来高效生成谦数序列,并针对不同的输入提供相应的输出格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比赛的时候TLE,然后就想能不能把整个需要的值先求出来,然后在查找输出。。。不幸的是,当时没想起来怎么利用2,3,5,7来产生所有的数。。。参考了一下别人的。。。

更纠结的是:英语不好,输出st,rd,nd,th一大堆的。。。。啊啊啊啊啊啊啊啊啊大哭

#include<stdio.h>
int min(int x,int y)
{
    return (x>y)?y:x;
}
int main()
{
    int n,i,k,a[5843],num2,num3,num5,num7;
    a[1]=i=num2=num3=num5=num7=1;
    while(a[i]<2000000000)
    {
       a[++i]=min(2*a[num2],min(3*a[num3],min(5*a[num5],7*a[num7])));
       if(a[i]==2*a[num2])
         num2++;
       if(a[i]==3*a[num3])
         num3++;
       if(a[i]==5*a[num5])
         num5++;
       if(a[i]==7*a[num7])
         num7++;
    } 
   while(scanf("%d",&n)&&n)
    {
        if(n%100==11 || n%100==12 || n%100==13 )
            printf("The %dth humble number is %d.\n",n,a[n]);
        else if(n%10==1) 
            printf("The %dst humble number is %lld.\n",n,a[n]);
        else if(n%10==2)
            printf("The %dnd humble number is %lld.\n",n,a[n]);
        else if(n%10==3)
            printf("The %drd humble number is %lld.\n",n,a[n]);
        else
            printf("The %dth humble number is %lld.\n",n,a[n]);

    }          
   return 0;
}                         


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值