第一章
1.最接近数差
略。O()方法,暴力循环即可
2.a[n]元素都不等......
略。最坏情况也就比较3次吧(数皆不等,比较三次,得a1<a2<a3,取a2即可)
3.n至少为多大时,n个1组成的整数能被2021整除。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int i=1;
int num=1;
while(1){
if (num % 2021 == 0) {
break;
} else {
num = (num % 2021) * 10 + 1;
/*
num的类型是int ,即使是long long 也不行。
eg.
11111=(2021*5+1006)
....
N/M=a....b
对M取余
就是得出N不能整除的一部分
可以先把能整除N的一部分去掉,也即(num%2021),只得到不能整除的部分,再继续计算
得到的数对N整除和本身整除结果是一样的。
*/
i += 1;
}
}
cout<<i<<endl;
}
4.任何一个自然数的因数都有1和它本身......判断给定的自然数是否是完美数。
#include <iostream>
#include <vector>
using namespace std;
int main() {
long long num;
cin>>num;
long long sum=1;
for(int i=2;i<=num/2;i++){
if(num%i==0) sum+=i;
if(sum>num){
cout<<"不是完美数"<<endl;
break;
}
}
if(sum==num){
cout<<"是完美数"<<endl;
}
}
5.过桥
不要”贪心”
正解:
甲乙先过桥(2)
甲拿电筒回来(1)
丙丁过桥(10)
乙拿回来(2)
甲乙过桥(2)
total=17min
6.欧几里得游戏
实质:辗转相减法
eg.
15 21
6 15 21
6 9 15 21
3 6 9 15 21
无法再写出了 写出3 6 9三个数 此时先手获胜
设置最初两数 a, b(a>b),两数的最大公约数为gcd,若a/gcd是奇数就先行动,否则就后行动