NSWOJ-GM的函数求值(找规律)

题目描述

 有一函数f(x)不知道它的具体表达值,但知道它有以下性质:
         1.函数的定义域是正整数域,值域为整数域
         2.f(1)=0
         3.f(2*x)=2*f(x)+1
         4.函数f(x)是单调递增函数,即如果x1>x2,则f(x1)>f(x2)

        根据以上性质可以确定函数f(x)的唯一表达式,现在给你一个整数x,请输出对应的函数值f(x)

输入

输入文件包含多组测试数据,每组测试数据一行,包含一个整数x(x<10^9),当x<1时程序结束

输出

对应每组输入,输出一行,每行只有一个整数,代表了x对应的函数值f(x).

样例输入

1
2
0

样例输出

0
1

分析:我们可以发现如下规律

           f(2)=2 f(1)+1=1

           f(4)=2 f(2)+1=3

           f(8)=2 f(4)+1=7

           f(16)=2 f(8)+1=15

           同时题目还说函数f(x)是单调递增函数,即如果x1>x2,则f(x1)>f(x2),值域为整数域。

           那么 f(2)=1 f(3)=2 f(4)=3  f(5)=4  f(6)=5  f(7)=6  f(8)=7  正好符合条件

           故我们可以得出 f(n)=n-1;

#include<stdio.h>
int n;
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
            break;
        else
            printf("%d\n",n-1);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值