首页 > 京东笔试编程题
头像
数组越界师
编辑于 2020-08-27 22:28
+ 关注

京东笔试编程题

第一题 输入一个整数,然后将这个整数逆序,再求他的五进制数 #include<iostream>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;

int main()
{
    int i;
    cin >> i;
    int t = 10;
    int temp = 0;
    int ni = 0;
    while (i)
    {
        if (i < 10)
        {
            ni *= t;
            ni += i;
            break;
        }
        temp = i / 10 * 10;
        temp = i - temp;
        ni *= t;
        ni += temp;
        i = i / 10;
    }
    t = 1;
    i = 0;
    while (ni)
    {   
        temp = ni % 5;
        t = t * 10;
        i += temp * t;
        ni = ni / 5;
    }
    cout << i / 10;
    return 0;
}
第二题
/*小明的新游戏
时间限制: 1000MS
内存限制: 65536KB
题目描述:
小明最近喜欢玩一款新游戏,他在游戏中扮演的是一个法师。法师每次可以使用一张法术牌来对boss造成一定的伤害,每一张法术牌都属于不同的种类。使用过的法术牌并不会被消耗掉,同一张法术牌可以重复使用。如果把boss的血量打到0代表胜利,而如果小于0则boss会复活,并对你造成9999点伤害,你就输了。

小明发现有多种胜利的方案,但是他不能找到所有的方案,所以他来寻求你的帮助。

使用的牌种类或数量不同代表不同的方案,改***的使用顺序同样代表不同的方案。由于方案数目可能非常大,结果需要对(1e9+7)取余。

例如:如果boss的血量为3,现在有3张不同的法术牌,3张牌可以造成的伤害分别为1、2和2。那么总的方案数一共有5种,分别如下:

(1) 第1张法术牌(血量-1)、第1张法术牌(血量-1)、第1张法术牌(血量-1)

(2) 第1张法术牌(血量-1)、第2张法术牌(血量-2)

(3) 第1张法术牌(血量-1)、第3张法术牌(血量-2)

(4) 第2张法术牌(血量-2)、第1张法术牌(血量-1)

(5) 第3张法术牌(血量-2)、第1张法术牌(血量-1)

你能否编写一个程序来帮助小明呢?



输入描述
单组输入,输入n+1行。

第1行两个正整数n和m表示拥有的法术牌的数量以及boss的血量,两个数字之间用空格隔开。(n<=100,m<=1000)

之后n行每行一个正整数表示每一张法术牌对boss造成的伤害。

输出描述
击败boss的方案数(结果对1e9+7取余)。


样例输入
3 3
1
2
2
样例输出
5*/



#include<iostream>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
void getans(int hp, int& count, int start, vector<int>card, int ohp)
{
    if (start == card.size())
        return;
    int num = hp / card[start];
    int i;
    int dam;
    for (i = num; i >= 0; i--)
    {
        dam = card[start] * i;
        if (dam == hp)
        {
            if (hp == ohp)
                count++;
            else
                count = count + 2;
        }
        else if (dam < hp)
        {
            getans(hp - dam, count, start + 1, card, ohp);
        }
        else if (dam > hp)
            continue;
    }
    return;
}


int main()
{
    int hp, n, dam;
    cin >> n;
    cin >> hp;
    int i;
    vector<int>card;
    int count = 0;
    if (n <= 0)
    {
        cout << 0;
        return 0;
    }
    for (i = 0; i < n; i++)
    {
        cin >> dam;
        card.push_back(dam);
    }
    if (hp <= 0)
    {
        cout << 0;
        return 0;
    }
    getans(hp, count, 0, card, hp);
    count = count % 100000007;
    cout << count;
    return 0;
}
第二题只有60,不懂哪里出了问题。。

全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐