vivo笔试题

原题目:一个员工第一天生产一个手机,随着时间的增长他越来越熟练,第二天和第三天可以生产2台,后面的3天每天可以生产3台,再后面4天每天可以生产4台,请写出这个员工第n天总共可以生产多少个手机

思路一:

把生产手机天数分成n个区间

[1,2) 生产1台

[2,4)生产2台

[4,7)生产3台

[7,11)生产4台

以此类推

代码:

#include<stdio.h>

int main(void)
{
    int n;
    int i=1,day=1;//生产i台的天数有i天,day到day+i的区间的天数生产i台
    scanf("%d", &n);
    while(1)
    {
        if(day<=n && n<day+i)    //符合区间天数退出循环
            break;
        day+=i;                //转到下一个区间
        i++;                    //下一个区间台数+1
    } 
    printf("第%d天生产%d台", n, i);
    return 0;
}

思路二:

设输入的天数为m天

生产1台天数为1天

生产2台天数为2天

生产3台的天数为3天

.........

生产n台的天数有n天

第m天等于前面n天的和

1+2+3+4+5+...+n=n*(n+1)/2=m

所以n=sqrt(1 + 8 * m) - 1) / 2,向上取整(天数不一定为生产n台的第n天)

代码:

#include <stdio.h>
#include <math.h>

int main(void)
{
    int n;
    printf("请输入n的值: ");
    scanf("%d", &n);
    printf("第n天生产的数量:%d\n", (int)ceil((sqrt(1 + 8 * m) - 1) / 2));
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值