Acwing第95场周赛题解

1.4873. 简单计算 - AcWing题库

Acwing第95场周赛题解_第1张图片

思考:水题。

#include
using namespace std;
int main(){
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    cout<

2.4874. 约数 - AcWing题库

Acwing第95场周赛题解_第2张图片

思考:这题其实就是判断一个数的算数平方根是不是素数,easy!

#include
using namespace std;
int n;
double x;
bool fun(int n) {
    if (n <= 1) return false;
    for(int i = 2; i <= n / i; ++i)
        if (n % i == 0) return false;
    return true;
}
int main(){
    cin>>n;
    while(n--){
        cin>>x;
        double ans = sqrt(x);
        if(ans == (int)ans && fun(ans))cout<<"YES"<

3.4875. 整数游戏 - AcWing题库

Acwing第95场周赛题解_第3张图片

思考:一眼博弈,如果轮到我操作,那么我肯定将第一个元素与数组中的最小值交换,那么对方就必输,因为对方不论将最小的与哪个元素交换,我都会将最小的元素放到第一位,下面演示一下。

举个例子:3 6 10

我先手:人机(大师)
6 2 10(3-1后,我将2与6交换位置)
2 5 10(6-1后,大师将5与2换位置,把最小的数又递还给我)
10 5 1(我摆烂了,我每次减的数都是最小数,我减的首位永远是大师决定的,所以我换啥都不重要了)
1 5 9(9-1后,大师把9与1换位置)
5 0 9(1-1后,我把0与9换位置)
0 4 9(5-1后,大师把0又给了我!这混蛋,首位为0,我输了!)
说明如果首位是最小值先手必输!(博弈思想)

换个例子:6 4 10

我先手:人机(大师)
4 5 10(6-1后,我将首位的5与第二个4交换)
5 3 10(4-1后,大师将3与5换位置)
3 4 10(5-1后,我又将最小的3放给了大师,哈哈,它减的数永远是最小的数)
4 2 10(3-1后,大师将2与4换位置)
2 3 10(这不,我又把最小的2丢给了大师)
3 1 10(2-1后,大师将1与3换位置)
1 2 10(3-1后,我把最小的数放到了首位)
2 0 10(1-1后,大师将0与2换位置)
0 1 10(2-1后,我把0换到了首位)
game over 大师输!
因为首位不是最小的,所以我操作时会把最小的数换到首位

你可能感兴趣的:(备考蓝桥杯,蓝桥杯,算法,c++)