第一題
Description
這天,迅風在欣賞某地的美景時,靈感大作,在上午及下午分別寫下了兩篇文章,而且迅風很喜歡數文章的字數。
具體地,如果迅風在下午寫下的文章的字數之和嚴格大於他在上午寫下的文章的字數之和,則認定他的靈感隨着時間的推移越積越多。
現在給出迅風所寫的四篇文章的字數,請你回答他的靈感是否隨着時間的推移越積越多。
Input
共一行,包含四個正整數 a,b,c,d分別表示迅風在上午寫下的兩篇文章的字數及他在下午寫下的兩篇文章的字數。
Output
答案共一行,若迅風的靈感隨着時間的推移越積越多,則輸出 Yes;否則,輸出 No。
Sample 1
|
Input
|
Output
|
|
|
|
Sample 2
|
Input
|
Output
|
|
|
|
數據範圍
對於 100%100% 的數據,1≤a,b,c,d≤1001≤a,b,c,d≤100。
思路
下午兩數之和如果大於下午兩數之和,輸出Yes,反之為No
代碼
#include <iostream>
using namespace std;
int main()
{
int a,b,c,d;
cin >> a >> b >> c >> d;
if(a + b < c + d){
cout << "Yes" << endl;
}
else{
cout << "No" << endl;
}
return 0;
}
第二題
Description
小紫和小藍是一對雙胞胎,但是在遊樂場裏走散了。然而她們有超能力。
當她們分開一段時間後,可以感應對方的位置,讓二人重聚——然而如果距離太遠,那麼感應也無可奈何。
具體地:
- 小紫在分離時間 ≥t1 分鐘時開啓感應,如果她和小藍距離不超過 d1d1,那麼可以感應到小藍的位置。
- 小藍在分離時間 ≥t2分鐘時開啓感應,如果她和小紫距離不超過 d2d2,那麼可以感應到小紫的位置。
當雙胞胎的一個人能感應到另一個人的位置,就可以行動使得兩人重聚。
現在小紫和小藍已經分離了 t 分鐘,當前距離為 d。她們都在原地等候。
請判斷至少還需要幾分鐘,才能讓雙胞胎中的一個人感應到另一個人的位置?
Input
輸入共有一行六個正整數 t,d,t1,d1,t2,d2,含義如題目描述所示。
Output
輸出一行一個整數,表示至少還需要等幾分鐘。特別地,如果無論等待多久都無法感應到,輸出 −1−1。
Sample 1
|
Input
|
Output
|
|
|
|
Sample 2
|
Input
|
Output
|
|
|
|
Sample 3
|
Input
|
Output
|
|
|
|
數據範圍
對於全體數據,保證 1≤t,d,t1,d1,t2,d2≤100
思路
主要分為兩步:
- 判斷兩個人誰能感應到,並獲取他們對應的時間
- 求出更小的哪一個並輸出
代碼
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int t,d,t1,d1,t2,d2;
cin >> t >> d >> t1 >> d1 >> t2 >> d2;
//用min1、min2表示兩個人如果能感應到,它們的時間分別是多少
int min1 = 0x3f3f3f3f, min2 = 0x3f3f3f3f;
if(d1 >= d){
min1 = t1 - t;
if(min1 < 0){
min1 = 0;
}
}
if(d2 >= d){
min2 = t2 - t;
if(min1 < 0){
min2 = 0;
}
}
if(min1 == 0x3f3f3f3f && min2 == 0x3f3f3f3f){
cout << "-1" << endl;
}
else{
cout << min(min1, min2) << endl;
}
return 0;
}
第三題
Description
一個正整數,正讀和反讀都相同的數為迴文數,例如 22,131,2442,37073,6,⋯。所有的 11 位數都是迴文數。
現給出一個正整數 n,求出 [1,n] 中的迴文數的個數。
Input
一個整數 n。
Output
一個整數,即 1∼n 中全部迴文數的個數。
Sample 1
|
Input
|
Output
|
|
|
|
數據範圍
1≤n≤10^4
思路
枚舉1~n所有的數字,一一的判斷是否是迴文數,使用一個計數器統計結果並輸出
代碼
#include <iostream>
using namespace std;
int ret, n;
//判斷是否為迴文數
bool Is_Reverse(int x)
{
int re_num = 0, tmp = x;
while(x){
re_num *= 10;
re_num += x % 10;
x /= 10;
}
return tmp == re_num;
}
int main()
{
cin >> n;
for(int i = 1; i<= n;i++){
if(Is_Reverse(i)){
ret++;
}
}
cout << ret << endl;
return 0;
}
第四題
Description
人比人,氣死人;魚比魚,難死魚。小魚最近參加了一個“比可愛”比賽,比的是每隻魚的可愛程度。參賽的魚被從左到右排成一排,頭都朝向左邊,然後每隻魚會得到一個整數數值,表示這隻魚的可愛程度,很顯然整數越大,表示這隻魚越可愛,而且任意兩隻魚的可愛程度可能一樣。由於所有的魚頭都朝向左邊,所以每隻魚只能看見在它左邊的魚的可愛程度,它們心裏都在計算,在自己的眼力範圍內有多少隻魚不如自己可愛呢。請你幫這些可愛但是魚腦不夠用的小魚們計算一下。
Input
第一行輸入一個正整數 n,表示魚的數目。
第二行內輸入 n 個正整數,用空格間隔,依次表示從左到右每隻小魚的可愛程度 a[i]。
Output
一行,輸出 n 個整數,用空格間隔,依次表示每隻小魚眼中有多少隻魚不如自己可愛。
Sample 1
|
Input
|
Output
|
|
|
|
數據範圍
對於 100%的數據,1≤n≤100,0≤ai≤10。
思路
兩層循環,外層循環遍歷所有魚,假設當前外層循環遍歷到第x只,那麼內層循環遍歷從1~x-1只魚,對於每一條魚判斷是否沒有第x只魚可愛,如果沒有,計數器加一,內層循環結束則輸出計數器結果
代碼
#include <iostream>
using namespace std;
int a[200];
int main()
{
int n; cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
int cnt = 0;
for (int j = 1; j <= i; j++) {
if (a[j] < a[i]) {
cnt++;
}
}
cout << cnt << ' ';
}
}
第五題
Description
一個 n個元素的整數數組,如果數組兩個連續元素之間差的絕對值包括了 [1,n−1]之間的所有整數,則稱之符合“歡樂的跳”,如數組 {1,4,2,3}符合“歡樂的跳”,因為差的絕對值分別為:3,2,1。
給定一個數組,你的任務是判斷該數組是否符合“歡樂的跳”。
Input
每組測試數據第一行以一個整數 n(1≤n≤1000)開始,接下來 n個空格隔開的在 [−108,108] 之間的整數。
Output
對於每組測試數據,輸出一行若該數組符合“歡樂的跳”則輸出 Jolly,否則輸出 Not jolly。
Sample 1
|
Input
|
Output
|
|
|
|
Sample 2
|
Input
|
Output
|
|
|
|
數據範圍
1≤n≤1000
思路
分為兩步:
- 輸入所有值,並將相鄰兩數之差的絕對值放在一個數組中
- 判斷該數組中是否是[1,n-1]中的所有數即就是將該數組排序,一一比較,有不同則輸出"Not jolly", 反之則為“Jolly”
代碼
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int jump[N];
int main()
{
int n; cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i < n; i++){
jump[i] = abs(a[i] - a[i + 1]);
}
sort(jump + 1, jump + n );
for (int i = 1; i <= n - 1;i++){
if (jump[i] != i){
cout << "Not jolly" << endl;
return 0;
}
}
cout << "Jolly" << endl;
return 0;
}
第六題
Description
在一箇舊式的火車站旁邊有一座橋,其橋面可以繞河中心的橋墩水平旋轉。一個車站的職工發現橋的長度最多能容納兩節車廂,如果將橋旋轉 180 度,則可以把相鄰兩節車廂的位置交換,用這種方法可以重新排列車廂的順序。於是他就負責用這座橋將進站的車廂按車廂號從小到大排列。他退休後,火車站決定將這一工作自動化,其中一項重要的工作是編一個程序,輸入初始的車廂順序,計算最少用多少步就能將車廂排序。
Input
共兩行。
第一行是車廂總數 N(≤10000)。
第二行是 N個不同的數表示初始的車廂順序。 (注:實際上數據中並不都在同一行,有可能分行輸入)
Output
一個整數,最少的旋轉次數。
Sample 1
|
Input
|
Output
|
|
|
|
思路
從題目中交換的描述我們就可以看出這是一個考察冒泡排序的題目,思路就是記錄冒泡排序交換了多少次
代碼
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int jump[N];
int main()
{
int n; cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i < n; i++){
jump[i] = abs(a[i] - a[i + 1]);
}
sort(jump + 1, jump + n );
for (int i = 1; i <= n - 1;i++){
if (jump[i] != i){
cout << "Not jolly" << endl;
return 0;
}
}
cout << "Jolly" << endl;
return 0;
}
第七題
Description
笨小猴的詞彙量很小,所以每次做英語選擇題的時候都很頭疼。但是他找到了一種方法,經試驗證明,用這種方法去選擇選項的時候選對的機率非常大!
這種方法的具體描述如下:假設 maxn是單詞中出現次數最多的字母的出現次數,minn是單詞中出現次數最少的字母的出現次數,如果 maxn−minn是一個質數,那麼笨小猴就認為這是個 Lucky Word,這樣的單詞很可能就是正確的答案。
Input
一個單詞,其中只可能出現小寫字母,並且長度小於 100。
Output
共兩行,第一行是一個字符串,假設輸入的單詞是 Lucky Word,那麼輸出 Lucky Word,否則輸出 No Answer;
第二行是一個整數,如果輸入的單詞是 Lucky Word,輸出 maxn−minn的值,否則輸出 0。
Sample 1
|
Input
|
Output
|
|
|
|
Sample 2
|
Input
|
Output
|
|
|
|
思路
分為兩步:
- 讀入字符串,統計最大字符數與最小字符數
- 完成判斷素數函數並進行判斷輸出
代碼
#include <iostream>
#include <unordered_map>
using namespace std;
string s;
int maxn = -1, minn = 200;
unordered_map<char, int> mp;
bool judge(int n)
{
if(n <= 1) return 0;
for (int i = 2; i < n; i++)
{
if (n % i == 0) return 0;
}
return 1;
}
int main()
{
cin >> s;
for (auto e : s){
mp[e]++;
}
for (auto e : mp){
maxn = max(maxn, e.second);
}
for (auto e : mp){
minn = min(minn, e.second);
}
if (judge(maxn - minn)){
cout << "Lucky Word" << endl << maxn - minn;
}
else{
cout << "No Answer" << endl << 0;
}
return 0;
}
第八題
Description
給定一行句子,每個詞之間用空格隔開,要麼是全小寫英文單詞,要麼是全大寫英文單詞,要麼是自然數。
要求將這些單詞倒序輸出。而且對於每個單詞,如果是小寫詞,應當轉為大寫;如果是大寫詞,應當轉為小寫;如果是自然數,應該倒轉輸出。
舉一個例子:
we choose TO go 2 the 123 moon
Plain text
程序應當輸出:
MOON 321 THE 2 GO to CHOOSE WE
Input
僅一行,即需要反轉的句子。
Output
僅一行,表示程序對句子的處理結果。
Sample 1
|
Input
|
Output
|
|
|
|
思路
按照字符串將一個個的單詞讀入字符串類型的數組中
- 反序輸出得到逆序
- 對於每一個對象,輸出前先考慮它是哪一種類型的,針對不同的類型進行不同的操作
代碼
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
string a[N];
void Re_Num(string& s)
{
reverse(s.begin(), s.end());
}
int main()
{
int i = 1;
while (cin >> a[i]) {
i++;
};
for (int j = i-1; j >= 1; j--) {
if (isalpha(a[j][0])) {
if (a[j][0] >= 'a' && a[j][0] <= 'z') {
for (auto e : a[j]) {
printf("%c", toupper(e));
}cout << ' ';
}
else {
for (auto e : a[j]) {
printf("%c", tolower(e));
}cout << ' ';
}
}
else {
Re_Num(a[j]);
cout << a[j] << ' ';
}
}
return 0;
}
結語
這就是西安郵電大學2025年移動應用開發實驗室所有二面題目的題解啦!