第一题 输入一个整数,然后将这个整数逆序,再求他的五进制数 #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) 回帖