一道简单题

一道简单题

Problem Description

有一道小学题对我印象一直比较深刻,大概是十年前吧那时我读小学六年级,数学老师带了我们几个数学学得还好的同学去参加区数学奥林匹克竞赛,在考场上这题当时就把我给难住了,也就是因为这题竞赛只得了第二,与第一擦肩而过,所以对这题对我来说一直印象很深,现在拿出来让大家热热身,不要想复杂了,当做娱乐就好。
当时题目是这样描述的:现有“★”和“☆”共150个,它的排列方式如下:
★☆☆★☆★★☆☆★☆★★……
让你求有多少个黑的五角星。

Input

输入一个正整数N,(0<=N<2^63),N表示两种颜色五角星的总个数。

Output

输出有多少个黑色的五角星。

Sample Input

13
62

Sample Output

7
31
解析:这个题是一个找规律的题,通过观察排列可以的到一下结论

 总五角星数                          黑五角星数

 1                                                 1

 2                                                 1

3                                                  1

4                                                  2

5                                                  2

6                                                  3

7                                                  4

8                                                  4

9                                                  4

10                                                5

11                                                5

12                                                6

13                                                7

这个是循环的,循环节是6,而且每个循环中前三个是一样的,再后面的两个是一样的,后面还剩一个。这三个数它们是递增的,相差为1。还有一个规律是每隔一个循环节的数也是等差数列1,4,7.它们的公差为3.所以就简单了。首先对输入的数n整除6.就得到是过几个循环节了m=n/6。然后对m求余,得到是这个循环节中的第几个数。如果取余是1,2,3,则为m*3+1.取余4,5,则为m*3+2.取余0为m*3+3.

#include"stdio.h"
int main()
{
    __int64 n,x,y,sum;
    while(scanf("%I64d",&n)!=EOF)
    {
        if(n==0)
        {
            printf("0\n");
            continue;
        }
        x=n/6;
        sum=1+x*3;
        y=n%6;
        if(y==0)
        sum=sum-1;
        if(y>0&&y<=3)
        sum=sum;
        if(y==4)
        sum+=1;
        if(y==5)
        sum+=1;
        printf("%I64d\n",sum);
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值