杭电2575

简单题,这题比赛时思绪混乱,哎,还是不行啊,

以后还得仔细读题,重点:学好英语!!!!

题意:计算一个数按下面操作能产生多少个数;

1,直接输出n;(产生1个数)

2,在n的左边加一位数,这个数小于n的最高位的一半!!!(哎,刚开始理解成n的一半抓狂

3.如果不能在添加数,结束,如果能,返回执行1.

例如,6,现输出6,之后可以变16,26,36,接着执行3,16不能再变,26可以变126,36可以变136;所以6,16,26,36,126,136,共6个。

0-9的直接算也可以,递归:f(n)=f(1)+f(2)+...f(n/2);

大于10的,直接取最高位按0-9的输出即可!!!

 

 

#include<stdio.h>
__int64 a[10];  //(int也行,习惯用它了,int老超,怕了)
int  main ()
{
    __int64 t,n,i,k;
    a[1]=1;a[2]=2;
    for(i=3;i<10;i++)
    {
        a[i]=1;
        for(k=1;k<=i/2;k++)
            a[i]+=a[k];
    }
    scanf("%I64d",&t);
    while(t--)
    {
        scanf("%I64dd",&n);
		while(n>9)
			n/=10;
        printf("%I64d\n",a[n]);
    }
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值