2021年广东工业大学第11届腾讯杯新生程序设计竞赛(同步赛)L-歪脖子树下的灯 (两种写法-dp&其它)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

11月份不知是深秋还是早冬,寒风翻过窗户与我相会。阵阵的凉意却让我还挺舒服。楼下庭院里的树早已脱去了叶子,光秃秃的枝干张牙舞爪的伸着。在风中摇曳着一棵歪脖子树。树下挂着一盏年久失修的灯。灯是那种老式的灯,开关自然也是拉线开关。透过窗户,看着那泛黄的麻线随风飘荡,我却冒出了个奇怪的想法:假设灯的初始状态是暗的,我每拉动一次开关,灯就会有p的概率转换状态(亮->暗 或 暗->亮)。那么当我拉动n次之后,灯是亮着的概率是多少呢?

输入描述:

第一行一个t(1≤t≤100),代表测试数据组数。

对于每一个测试样例, 第一行有一个整数n(1≤n≤100),和一个实数p(0≤p≤1), 分别代表拉动开关的次数和灯转换状态的概率p。

输出描述:

对于每一个测试样例,输出一个PPP,代表灯是亮着的概率,如果你的答案与正确答案的差的绝对值小于10−4则认为正确。

示例1

输入

2
1 0.5
2 0.6

输出

0.500000 0.480000

解题思路:亮的要求就是,前一时刻是灭然后乘转化率变成亮,或者就是前一时刻亮,下一时刻保持亮。

AC1

#include<stdio.h>
int main(void)
{
    int t,n;
    double dp[300],p;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %lf",&n,&p);
        dp[0]=0;//初始状态灭 
        for(int j=1;j<=n;j++)
        {
			//上一时刻灯亮*保持 ,上一时刻灯灭*转换概率
			dp[j]=dp[j-1]*(1-p)+(1-dp[j-1])*p;
        }
        printf("%.6lf\n",dp[n]);
    }
    
    return 0;
}

AC2

#include<stdio.h>
int main(void)
{
    int t,n;
    double p,ans;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %lf",&n,&p);
        ans=0.0;//初始状态灭 
        for(int j=1;j<=n;j++)
        {
			ans = ans*(1-p)+ (1-ans)*p;
        }
        printf("%.6lf\n",ans);
    }
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值