判断回文数

任务描述

本关任务:所谓“回文”是一种特殊的或者文字短语。它们无论是顺读还是倒读,结果都是一样。例如,以下的几个 5 位整数都是回文数:12321、77777、89998 和 44774。编写一个程序,读入一个 5 位整数后,判断它是否是回文数。

测试说明

输入描述:一个 5 位整数

输出描述:“Yes”或“No”

样例输入1:12321

样例输出1:Yes

样例输入2:12323

样例输出2:No

参考代码

#include <iostream>
using namespace std;

int main(void) {
/******** Begin ********/
    int n; cin >> n;
    if (n/10000 == n%10 && n/1000%10 == n/10%10)
        cout << "Yes" << endl;
    else cout << "No" << endl;

/********  End  ********/
    return 0;
}

二次函数

任务描述

本关任务: 对于任意定义域为 $\mathbb{R}$,且在 $\mathbb{R}$ 上连续的函数 $f(x)$,定义 函数 $\mathop{max}f(x)$ 为区间 $[x,x+1]$ 上 $f(x)$ 的最大值; 函数 $\mathop{min}f(x)$ 为区间 $[x,x+1]$ 上 $f(x)$ 的最小值。 即 $\mathop{max}f(x) = \max_{t\in[x,x+1]} f(t)$ $\mathop{min}f(x) = \min_{t\in[x,x+1]} f(t)$

已知二次函数$f(x)=x^2-2x+2$,给定 $x$ , 求 $\mathop{max} \mathop{min} f(x)$ 和 $\mathop{min} \mathop{max} f(x)$。

相关知识

为了完成本关任务,你需要掌握:1.C++分支结构;2.初中数学知识。

说明

比如求$\mathop{max} \mathop{min} f(x)$。 $g(x)=\mathop{min} f(x)$是一个关于$x$的函数,意义是$f(x)$在区间$[x,x+1]$的最小值; $h(x)=\mathop{max} g(x)$也是一个关于$x$的函数,意义是$g(x)$在区间$[x,x+1]$的最大值。 所以给定$x$,$h(x)$是$g(x)$在区间$[x,x+1]$的最大值,而每一个$g(t)(x\leq t\leq x+1)$都是$f(x)$在区间$[t,t+1]$的最小值。

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

输入描述

一个整数$x$,$(-1000 \leq x \leq 1000)$

输出描述

两个小数,分别精确到小数点后3位,以一个空格相间,表示答案

样例一

输入:0 输出:1.000 1.250

样例二

输入:1 输出:2.000 2.000

参考代码

#include <iostream>
#include <iomanip>
using namespace std;

int main(void) {
/******** Begin ********/
    int x; cin >> x;
    if (x == 0) cout << fixed << setprecision(3) << 1.0 << " " << 1.25 << endl;
    else cout << fixed << setprecision(3) << x*x+1.0 << " " << x*x+1.0 << endl;

/********  End  ********/
    return 0;
}

电话数据加密

任务描述

本关任务:一个公司想通过电话传输数据,但是担心电话可能被窃听。这个公司的所有的数据都采用 4 位整数的形式进行传输。对于一个 4 位整数,他们按如下方法进行加密:首先,将每位数字替换成它与 7 相加之和再用 10 取模的结果。然后,对替换后的数,其第 1 位和第 3 位相交换,第 2 位和第 4 位相交换。我们要求编写这样一个程序:对于输入的两个 4 位整数 n,m,输出分别对 n 加密和对 m 解密的结果。(对于加密或者解密后出现小于 1000 的情况,不输出第一位的 0)。

测试说明

输入描述:两个 4 位整数 n,m(1000<=n,m<=9999),使用一个空格分隔。 输出描述:对 n 加密和 对m 解密之后的结果,使用一个空格分隔。

样例输入1:1234 5678 样例输出1:189 189

样例输入2:8071 4287 样例输出2:4857 1075

参考代码

#include <iostream>
#include <iomanip>
using namespace std;

int main(void) {
/******** Begin ********/
    int n, m;
    cin >> n >> m;
    cout << (n/10%10+7)%10 * 1000
        + (n%10+7)%10 * 100
        + (n/1000+7)%10 * 10
        + (n/100%10+7)%10
        << " "
        << (m/10%10+3)%10 * 1000
        + (m%10+3)%10 * 100
        + (m/1000+3)%10 * 10
        + (m/100%10+3)%10;
/********  End  ********/
    return 0;
}

奇偶分解

任务描述

本关任务:总所周知,对于任何一个正整数 $n$,存在唯一的非负整数 $k$和正奇数 $q$使得 $n=2^kq$。比如 $10=2^1\times 5$,$8=2^3\times 1$,$15=2^0\times 15$ 等。 给定 $n\ (1\leq n\leq 128)$,输出相应的 $k$ 和 $q$。

相关知识

为了完成本关任务,你需要掌握:C++分支语句。

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

输入描述

一行,一个正整数 $n$,保证 $1\leq n\leq 128$。

输出描述

一行,两个整数 $k$ 和 $q$,以一个空格相间。

样例1

输入:10 输出:1 5

样例2

输入:8 输出:3 1

参考代码

#include <iostream>
using namespace std;

int main(void) {
/******** Begin ********/
    int n; cin >> n;
    int k = 0;
    if (n%2 == 0) n/=2, k++;
    if (n%2 == 0) n/=2, k++;
    if (n%2 == 0) n/=2, k++;
    if (n%2 == 0) n/=2, k++;
    if (n%2 == 0) n/=2, k++;
    if (n%2 == 0) n/=2, k++;
    if (n%2 == 0) n/=2, k++;
    cout << k << " " << n << endl;

/********  End  ********/
    return 0;
}

参考代码二(使用循环)

#include <iostream>
using namespace std;

int main(void) {
/******** Begin ********/
    int n; cin >> n;
    int k = 0;
    while (n%2==0) n/=2, k++;

    cout << k << " " << n << endl;

/********  End  ********/
    return 0;
}