湖南警察学院程序设计新生练习赛2题解

目录

A:明天星期几呢?

B:神奇的数字变换

 C:简单的素数判断

D:简单的数列和 

E:神奇的数列(easy)

F:神奇的数列(hard)


A:明天星期几呢?

今天星期一,明天必然星期二。这是肯定不变的规律。如果我告诉大家,今天礼拜几,你能帮我推算出明天星期几吗? 已知,我们对于星期几的日期(周一到周日)简写如下: 1,2,3,4,5,6,7

输入:

1

 输出:

2

代码展示: 

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    if(n==7)cout<<1<<endl;//特判星期天的情况
    else cout<<n+1<<endl;
}

B:神奇的数字变换

有一个数字魔法,给你一个正整数n,如果n为偶数,就将他变为n/2, 如果n为奇数,就将他变为乘3加1,不断重复这样的运算,经过有限步之后,一定可以得到1,牛牛为了验证这个魔法,决定用一个整数来计算几步能变成1

输入:

3

输出:

代码展示:

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int cnt=0;//cnt记录循环次数
    while(n-1)//当n-1不为0,也就是当n不等于1的时候。进行下面的循环
    {
        if(n%2==0)n/=2;
        else n=n*3+1;
        cnt++;//每次循环结束cnt加1.
    }
    cout<<cnt<<endl;
}

 C:简单的素数判断

给你一个整数n, 判断它是否是素数。注意1不是素数。

输入:

2
1
2

 输出:

No
Yes

 代码展示:

#include<bits/stdc++.h>
using namespace std;
int t;
int main()
{
    cin>>t;
    while(t--)//代表有t组输入样例
    {
        int a;
        cin>>a;
        int flag=0;
        if(a==1)flag=1;//如果a的值为1,flag标记为1.
        for(int i=2;i<=a-1;i++)
        {
            if(a%i==0)
            {
                flag=1;//如果a存在非1或者非本身的因数,那么flag标记为1.
                break;
            }
        }
        if(flag==0)cout<<"Yes"<<endl;//如果flag为0,说明a为素数。否则a为非素数。
        else cout<<"No"<<endl;
    }
}

D:简单的数列和 

这次牛牛又换了个数列,他想计算:1+1/2+1/3+…+1/N的值。(保留6位小数)

输入:

2

输出:

1.500000 

代码展示:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    double sum=0;
    for(int i=1;i<=n;i++)//将i从1到n遍历一遍。
    {
        sum+=1.0/i;//将所遍历到的i用sum加上。
    }
    printf("%.6lf",sum);//小数输出用printf,这里保留6位输出
}

E:神奇的数列(easy)

求fib数列的第n项,前几项是1,1,2,3,5,每一项都等于前面两项的和

输入:

2

 输出:

1

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a=1,b=1;
    int ans;
    if(n==1)cout<<1<<endl;
    else if(n==2)cout<<1<<endl;//斐波那契数列第一和第二项为1.
    else 
    {
        for(int i=3;i<=n;i++)
        {
            ans=a+b;//ans赋值为a和b的和
            a=b;//a赋值为b
            b=ans;//b赋值为ans
        }
        cout<<ans<<endl;
    }
}

F:神奇的数列(hard)

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

输入:

4

输出:

3

代码展示:

//这题和上一题相似,请自行理解。
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a=0;
    int b=1;
    int c=1;
    int n;
    cin>>n;
    if(n==1)cout<<a<<endl;
    else if(n==2)cout<<b<<endl;
    else if(n==3)cout<<c<<endl;
    else 
    {
        int ans;
        for(int i=4;i<=n;i++)
        {
            ans=a+2*b+c;
            a=b;
            b=c;
            c=ans;
        }
        cout<<ans<<endl;
    }
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值