中国電子協会 2023 年 5 月青少年ソフトウェア プログラミング C++ レベル試験用紙レベル 4 の実際の質問 (解答を含む)

ここに画像の説明を挿入します

1. 怪盗キッドのグライダー

怪盗キッドは伝説の怪盗、宝石専門のスーパー怪盗です。彼の最も優れている点は、中村警察署の厳重な包囲を毎回逃れることができることですが、これは彼が携行している操作の簡単なハンググライダーによるところが大きいです。
ある日、いつものように怪盗キッドが貴重なダイヤを盗むが、変装がコナンの子供たちにバレてしまい、コナンが蹴ったサッカーでグライダーの動力装置も破壊されてしまう。最後の手段として、怪盗キッドは破損したグライダーを使って逃げるしかありません。
市内に N 棟の建物が並んでおり、それぞれの建物の高さが異なるとします。最初は、怪盗キッドはどの建物の上にもいることができます。逃げる方向は選べるが、途中で方向を変えることはできない(中森署に追われるため)。グライダーの動力装置が損傷していたため、下方向にしか滑空できませんでした(つまり、高い建物から低い建物までしか滑ることができませんでした)。彼は、できるだけ多くの異なる建物の上を通過したいと考えていました。そうすることで、降下の衝撃が遅くなり、怪我の可能性が減ります。教えてください。彼はさまざまな建物の頂上を最大何個通過できますか (最初の建物を含む)。

【入力】

入力データの最初の行は整数 K (K < 100) で、K セットのテスト データを表します。テスト データの各セットには 2 行が含まれています。最初の行は整数 N (N < 100) で、N 個の建物を表します。2 行目には N 個の異なる整数が含まれており、それぞれが建物の高さ h (0 < h < 10000) に対応し、建物の配置順に指定されます。

【出力】

テスト データのセットごとに、怪盗キッドが通過できる建物の最大数を表す整数を含む行を出力します。

【入力例】

3
8
300 207 155 299 298 170 158
65
8 65 158 170 298 299 155 207 300 10
2
1 3 4 5 6 7 8 9 10

【出力例】

6
6
9

参考回答



2. 数字の組み合わせ

n 個の正の整数があり、合計が t となる可能な組み合わせを見つけます (t も正の整数です)。例: n=5、5 つの数値はそれぞれ 1、2、3、4、5、t=5; この場合、考えられる組み合わせは 3 つあります: 5=1+4、5=2+3、および 5=5。

【入力】

入力の最初の行は、スペースで区切られた 2 つの正の整数 n と t で、1<=n<=20 は正の整数の数を表し、t は必要な合計 (1<=t<=1000) です。次の行には、スペースで区切られた n 個の正の整数が含まれます。

【出力】

および は t の異なる組み合わせの数です。

【入力例】

5 5
1 2 3 4 5

【出力例】

3

参考回答

#include <bits/stdc++.h>
using namespace std;

int a[25],n,t,ans;

void dfs(int i,int sum){
    
    
	if(i==n){
    
    
		if(t==sum){
    
    
			ans++;
		}
		return;
	}
	i++;
	dfs(i,sum+a[i]);
	dfs(i,sum);
}

int main(){
    
    
	cin>>n>>t;
	for(int i=1;i<=n;i++){
    
    
		cin>>a[i];
	}
	dfs(0,0);
	cout<<ans;
	return 0;
} 

3. ワイルドカードを使用した文字列のマッチング

ワイルドカードはキーボード文字の一種で、実際の文字がわからない場合、またはフルネームを入力したくない場合に、1 つまたは複数の実際の文字を置き換えるためによく使用されます。ワイルドカード文字には、疑問符 (?) やアスタリスク ( ) などが含まれます。このうち、「?」は 1 文字、「 "」は 0 文字以上の文字と置き換えることができます。
あなたの仕事は、ワイルドカード文字を含む文字列とワイルドカード文字を含まない文字列が与えられた場合に、それらが一致するかどうかを判断することです。
たとえば、1?456 は 12456、13456、および 1a456 と一致しますが、23456 および 1aa456 とは一致できません。2*77?8 は、24457798、237708、および 27798 と一致します。

【入力】

入力には 2 行があり、各行は 20 文字以下の文字列で、最初の行にはワイルドカード文字が含まれ、2 行目にはワイルドカード文字は含まれません。

【出力】

両者が一致する場合は「一致」を出力し、一致しない場合は「不一致」を出力します。

【入力例】

1*456?
11111114567

【出力例】

一致した

参考回答



4. 株式取引

最近、株式市場に投資する人が増えてきて、阿福も少し興奮しています。「株式市場にはリスクがあり、市場に参入する際には注意が必要である」ということを念頭に置き、アフ氏はまず株式取引の問題の簡易版を勉強することにしました。
Afu が次の N 日間の特定の株式の価格を正確に予測し、利益を最大化するためにそれを 2 回売買したいと考えているとします。計算を簡単にするために、利益は販売価格から購入価格を引いたものとして計算されます。
同日に複数の販売・購入が可能です。ただし、最初の購入後、2 回目の購入の前にまず売却する必要があります。
さて、アフは自分が得られる最大の利益を知りたいと考えています。

【入力】

入力の最初の行は整数 T (T <= 50) で、合計で T セットのデータがあることを意味します。後続の各データ セットの最初の行は整数 N (1 <= N <= 100,000) で、合計 N 日を示します。2 行目はスペースで区切られた N 個の整数で、毎日の株価を表します。株式の日次価格の絶対値が 1,000,000 を超えることはありません。

【出力】

データセットごとに 1 行を出力します。この行には、Afu が得られる最大利益を表す整数が含まれています。

【入力例】

3
7
5 14 -2 4 9 3 17
6
6 8 7 4 1 -2
4
18 9 5 2

【出力例】

28
2
0

提示:对于第一组样例,阿福可以第 1 次在第 1 天买入(价格为 5 ),然后在第 2 天卖出(价格为 14 )。第 2 次在第 3 天买入(价格为 -2 ),然后在第 7 天卖出(价格为 17 )。一共获得的利润是 (14 - 5) + (17 - (-2)) = 28 对于第二组样例,阿福可以第 1 次在第 1 天买入(价格为 6 ),然后在第 2 天卖出(价格为 8 )。第 2 次仍然在第 2 天买入,然后在第 2 天卖出。一共获得的利润是 8 - 6 = 2 对于第三组样例,由于价格一直在下跌阿福可以随便选择一天买入之后迅速卖出。获得的最大利润为 0

参考回答


おすすめ

転載: blog.csdn.net/m0_46227121/article/details/131361066