SWPUACM招新考核题解

问题 A:龙卷风摧毁停车场

一道简单的递推题,而且递推式都给出来了

An=(An-1+1)*2

For循环就好了

 

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

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int ans=1;
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
            ans=(ans+1)*2;
        printf("%d\n",ans);
    }
    return 0;
}


 

 

 

问题 B:老虎吃布丁

也是递推不过要自己写递推式。。

首先把面包想成一个平面(平时自己切你应该也不会从中间分开把……而且数据也可以看出)

切法:让新的刀和之前的每一刀交叉。

这样第i刀就可以多出i块

所以递推公式就是

Ai=Ai-1+i

For循环就好了…

 

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

int main()
{
    int n;
    int i;
    int ans;
    while(~scanf("%d",&n))
    {
        ans=1;
        for(i=1;i<=n;++i)
            ans=ans+i;
        printf("%d\n",ans);
    }
    return 0;
}


问题 C:一虎杀两羊

两个变量一个算累和一个算阶乘然后加起来就好,当然累和也可以直接求和公式

需要注意的就是会超int所以要用long long定义.

还有0的阶乘是1。。。。。。。。

 

 

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

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int i;
        long long sum1=0,sum2=1;
        for(i=1;i<=n;++i)
        {
            sum1+=i;
            sum2*=i;
        }
        printf("%lld\n",sum1+sum2);
    }
    return 0;
}

 

问题 D:弗朗明哥舞步

一道博弈论的题。。当然你们可以想成是找规律。。

右脚不可控,但我们可以通过左脚让它变为可控。

右脚走4,左脚就走1

右脚走3,左脚就走2

右脚走2,左脚就走3

右脚走1,左脚就走4

这样就让每一轮肯定走的是5,所以第一步就让之后剩下的格子数变为5的倍数就好,所以如果一开始的数是5的倍数,就不能做到一定左脚线上

 

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


int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        if(n==0)
            break;
        if(n%5==0)
            printf("-1\n");
        else
            printf("%d\n",n%5);
    }
    return 0;
}



问题 E:脑袋砸核桃

签到题。。。唯一需要注意的就是要空两行,本来想卡最后一行的格式,但垃圾OJ判定不了。。所以就彻底是道SB题了。。。

 

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

int main()
{
    int n;
    int flag=0;
    while(~scanf("%d",&n))
    {
        if(flag)
            printf("\n");
        else
            flag=1;
        printf("%d\n",n+1);
    }
    return 0;
}



问题 F:睡熊盲醒

考虑两种情况就好:

1、 整点

2、 7点前还是后,7点后就多一天

 

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

int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        int x,y;
        if(m==0)
        {
            if(n<=7)
            {
                x=7-n;
                y=0;
            }
            else
            {
                x=7+24-n;
                y=0;
            }
        }
        else
        {
            if(n<7)
            {
                x=7-n-1;
                y=60-m;
            }
            else
            {
                x=7+24-n-1;
                y=60-m;
            }
        }
        printf("%d %d\n",x,y);
    }
    return 0;
}





 

问题 G:猫转身

应该小学或者初中做过把。。。。。。

虽然看起来小玉跑的路很复杂,但只要算阿福和乘龙碰面需要的时间乘上小玉的速度就好。

 

 

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

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        double v1,v2,v3,l;
        scanf("%lf%lf%lf%lf",&v1,&v2,&v3,&l);
        double ans=l/(v1+v2)*v3;
        printf("%.2lf\n",ans);
    }
    return 0;
}



 

 

问题 H:猫抖水

其实只要第一次停下时没被抓住就肯定不会被抓住。

1、 猫速度比阿福慢肯定抓住。

2、 猫一次跑的距离比阿福在猫跑一次加抖水一次跑的距离断就被抓住。

需要主意的是Success Escape!的!是全角的。。为的是告诉你们遇到这种最好直接粘贴复制。。。。。

 

 


#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>int main(){    int l,v1,v2,t1,t2;    while(~scanf("%d%d%d%d%d",&l,&v1,&v2,&t1,&t2))    {        if(v1>=v2)        {            printf("GG\n");            continue;        }        if(v2*t1>=l)        {            printf("Success Escape!\n");            continue;        }        if(v2*t1<=v1*(t1+t2))        {            printf("GG\n");        }        else        {            printf("Success Escape!\n");        }    }    return 0;}

问题 I:我是黑虎阿福

本来是想做签到题的。。。没想到这么多人没看懂这道题要干什么。。。。

这道题就数一下这套题的标题一共有多少个字。。。一共50个

 

 

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


int main()
{
    printf("50\n");
    return 0;
}

 

问题 J:老鼠偷奶酪

这道题其实只需要让等待时间尽量少的老鼠先偷奶酪就好。

比如第二组样例15 2 1 5 3

其实很好想,让等待时间少的拿,那么相同等待时间下我就可以拿更多个比如等待时间为6时我可以拿1 2 3也可以拿1 5,显然拿1 23拿到的老鼠更多

想到这里这道题就很简单了,排个序然后拿就好了。。。。


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

int main()
{
    int i,j;
    int t;
    int a[100001];
    int n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(i=0;i<n;++i)
        {
            scanf("%d",&a[i]);
        }

        for(j=0;j<n-1;j++)
        {
            for(i=0;i<n-1-j;i++)
            {

                if (a[i]>a[i+1])
                {
                    int tmp=a[i];
                    a[i]=a[i+1];
                    a[i+1]=tmp;
                }
            }
        }
        int wait=0;
        int lost=0;
        for(i=0;i<n;++i)
        {
            if(a[i]>=wait)
            {
                wait+=a[i];
            }
            else
            {
                lost++;
            }
        }
        printf("%d\n",lost);

    }
    return 0;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值