1602: 再次签到 //注 本题有错!但是就这么AC了! 应该是DP不是贪心!

1602: 再次签到
时间限制: 3 Sec  内存限制: 128 MB
提交: 212  解决: 117
[提交][状态][讨论版]
题目描述
经过一段时期的观察,老师觉得ACM实验室的利用率太低了,于是决定启用老套的签到积分制度,但考虑到ACMer的成长必须持之以恒,因此,专门设计了一种激励连续签到的规则。

签到积分规则如下:

1)每天只要来到ACM实验室学习并录入指纹,即算签到成功,可获取相应的积分;若某天未签到,则当天计0个积分。

2)连续签到时,第1天签到可获取1个积分,第2天签到可获取2个积分,……,第n天可获取n个积分。

3)如果中途未签到,则再签到时,连续天数重新从1开始计算。



自从有了积分制度后,ACM实验室的利用率大大的提高。

有一天集训队队长在签到后向大家出了一个难题,她向大家亮出了自己的签到积分总和,然后要大家算出她至少要签到多少天,并算出从开始签到到最后签到之间至少有多少天未签到。

输入
有多组测试数据;

每行输入1个正整数n(1<=n<=500500)。

输出
与输入的测试数据相对应,每行输出2个数据,一个是签到的最少天数,一个是中途未签到的最少天数,2个数用一个空格隔开。

样例输入
5
8
22
25
27
28
样例输出
4 2
5 2
7 1
9 2
9 1
7 0
提示
来源
Derson,2014年湖南科技大学校赛


来源: http://acm.hnust.edu.cn/JudgeOnline/problem.php?id=1602
//简单思路  死命的贪心
#include <cstdio>
void Cal(int n)
{
    int k=0,days=0,disdays=0;
    while(k<=n)
    {
        for(int i=1;i<=n;i++)
        {
            if(k==n)  break;      //否则k==n 时在下面语句后会多一天disday才退出
            if(k+i>n) {disdays++;break;}
            else      {days++;k+=i;}
        }
        if(k==n) break;  //补上一句否则可能卡在k==n时不跳出循环
    }
    printf("%d %d\n",days,disdays);

}
int main()
{
    int n;
    while(~scanf("%d",&n)) Cal(n);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值