C++ 每日一练
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
C++ 每日一练
- 前言
- 一、因数-数字游戏
- 二、通货膨胀-x国货币
- 三、熊孩子拜访
前言
突然想起了C++,很久没用过了,python真香,为了做个正经程序人,捡起来练练。就用csdn的每日一练试试。
要代码效率就用C++,要码代效率就用python。
`提示:2023年4月5号清明节的每日一练。
一、因数-数字游戏
描述:小Q的柠檬汁做完了。 掏出了自己的数字卡牌。 想要和别人做数字游戏。 可是她又不想要输掉游戏。 她制定好规则,每次每个人只能把这个牌换成它的因子的某个牌。 但是这个因子不能是1或者整数本身。 现在给出整数n。 两个人开始做游戏,先手在最优策略状态下能否必胜。
要说这题有多难嘛,真心不难!但是这个神一样的题目描述,用了我半天带测带蒙才看懂!
题目结论:
1、如果n是素数,输出1. 因为一张出完。
2、如果只有二个因数,输出2. 因为小Q先手。
3、如果有大于等于三个因数,输出1. 因为超过三个因数时,小Q可以组合多个因数。
输入描述:输入整数n。(1<=n<=1e13)
输出描述:先手赢输出”1”,后手赢输出”2”。
示例:
输入
6
输出
2
代码如下:
using namespace std;
int solution(long int n){
int result;
// TODO:
vector<long> vec;
long i=2;
while (i*i <=n){
while (n%i==0){
vec.push_back(i);
n/=i;
}
i++;
}
if (n>1) vec.push_back(n);
if (vec.size()==2) result=2;
else result = 1;
return result;
}
这题用暴力法,会超时,别问我怎么知道的~
二、通货膨胀-x国货币
描述:X国发行货币最高面额为n。 次高面额为n的因子。 以此类推。 X国最多发行多少种货币。
重点思路:
从小到大除,除出的商肯定是因子。除n外,不会有大于n/2的因子。
输入描述:输入整数n。(1<=n<=1000000)表示货币的最大面额
输出描述:输出货币的种类。
示例:
输入
10
输出
3
代码如下:
int solution(int n){
int result=1, i=1; //result=1这个1是本身
// TODO:
while (n/2 >= i) {
if (n%i==0) result++, n=n/i, i=1;
++i;
}
return result;
}
一次搞定,没用暴力法。
三、熊孩子拜访
描述:已知存在一个长度为n的整数序列A。 A中所有元素按照从小到达的顺序进行排序。 现在执行操作倒置一段序列。 请找到A序列里的倒置子序列。
输入描述:第一行输入整数n.(1<=n<=1000)。 第二行输入n个整数。(1<=num<=10000)
输出描述:输出被倒置的数列的左值,右值。 如果没有输出0 0
示例:
输入
4
1 3 2 4
输出
2 3
代码如下:
std::vector<int> solution(int n, std::vector<int>& vec){
std::vector<int> result;
// TODO:
using namespace std;
int L=0, R=0, L_flag=1;
for (int i=0; i<n; ++i){
if (vec[i] > vec[i+1] && i+1<n){
R=vec[i+1];
if (L_flag) L=vec[i], L_flag=0;
}
}
result={R,L};
return result;
}
这题目描述得也有点问题,至少左右倒了!