[ブルーブリッジカップ]試験問題トレーニング-第6回蘭橋カップ州大会C / C ++大学グループBの試験問題の分析

質問1宝くじの数 

数字に迷信を抱く人もいます。たとえば、「4」の数字は「死」のホモフォニーだと思ってしまい、運が悪いです。
これらの主張はまったくナンセンスですが、一般の人々のニーズに応える必要がある場合もあります。宝くじの抽選番号は5桁(10000〜99999)で、「4」の数字が必要です。主催者から、2枚の宝くじが重複していない場合に発行できる宝くじの枚数を計算してください。
数字(整数)を送信し、余分なコンテンツや説明文を書かないでください。

回答:52488

アレンジ、8 * 9 * 9 * 9 * 9

 

質問2ギャラクシー爆弾

X銀河の広大な空間に浮かぶX星の人工「爆弾」がたくさんあり、宇宙の道路標識として使われています。
各爆弾は数日で爆発するように設定できます。
たとえば、アルファ爆弾が2015年11月11日に配置され、時刻が15 1515日である場合、2015年11月16日に爆発します。
2014年11月9日、2014年11月9日に配置されたベータ爆弾があります。時間は1000 10001000日です。爆発した正確な日付を計算してください。
日付をyyyy− mm − dd yyyy-mm-ddyyyy−mm−ddの形式で入力してください。これは444桁の年222桁の月222桁の日です。例:2015-02-19
注:形式に厳密に従って記述してください。他の単語や記号は表示できません。

回答:2017-8-5 

 

3番目の質問

次の加算式を守ってください。
ここに画像の説明を挿入
その中で、同じ漢字は同じ数字を表し、異なる漢字は異なる数字を表します。
「SanyangXianrui」(答えはただ)で表される4桁を記入してください。冗長な内容は記入しないでください。

回答:1085

フルアレンジ

#include <iostream>
#include <algorithm>
using namespace std;
 
int main(int argc, char** argv) {
	int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
	do{
		if(a[0] == 0 || a[4] == 0){
			continue;
		}
		int num1, num2, sum;
		num1 = a[0]*1000 + a[1]*100 + a[2]*10 + a[3];
		num2 = a[4]*1000 + a[5]*100 + a[6]*10 + a[1];
		sum = a[4]*10000 + a[5]*1000 + a[2]*100 + a[1]*10 + a[7];
		if(num1 + num2 == sum){
			cout << num2 ;
			break;
		}
	}while(next_permutation(a, a+10));
	
	return 0;
}

 

4番目の質問グリッドに出力

StringInGrid関数は、指定された文字列を指定されたサイズのグリッドに出力します。
ストリングは、水平方向と垂直方向の両方の中央に配置する必要があります。
文字列が長すぎると、切り捨てられます。
中央に配置できない場合は、少し左または上に移動できます。
次のプログラムはこのロジックを実装しています。下線部分に不足しているコードを入力してください。
タイトルのデータについては、次のように出力する必要があります。

ここに画像の説明を挿入

注:不足しているコンテンツのみを入力し、タイトルに既存のコードや説明テキストを記述しないでください。

 回答案:(幅-strlen(buf))/ 2- 1、 ""、buf、(幅-strlen(buf))/ 2- 1、 ""

 %[*] [入力データ幅] [長さ]タイプ

printf( "%* s%s%* s"、(width-strlen(buf))/ 2-1、 ""、buf、(width-strlen(buf))/ 2-1、 "");は( width-strlen(buf))/ 2-1スペース、次に%sはbufを出力し、最後に残りのスペースを出力します

#include <stdio.h>
#include <string.h>

void StringInGrid(int width, int height, const char* s)
{
	int i, k;
	char buf[1000];
	strcpy(buf, s);
	if(strlen(s) > width-2) buf[width-2]=0;
	
	printf("+");
	for(i=0; i < width-2; i++) 
		printf("-");
	printf("+\n");
	
	for(k=1; k < (height-1)/2; k++){
		printf("|");
		for(i=0; i < width-2; i++) 
			printf(" ");
		printf("|\n");
	}
	
	printf("|");
	
//	printf("%*s%s%*s",_____________________________________________);  //填空
	printf("%*s%s%*s", (width - strlen(buf))/2 - 1, " ", buf, (width - strlen(buf))/2 - 1, " ");
	
	printf("|\n");
	
	for(k=(height-1)/2+1; k<height-1; k++){
		printf("|");
		for(i=0;i<width-2;i++) printf(" ");
		printf("|\n");
	}	
	
	printf("+");
	for(i=0;i<width-2;i++) printf("-");
	printf("+\n");	
}

int main()
{
	StringInGrid(20,6,"abcd1234");
	return 0;
}

質問5:9つの配列スコア

9つの数字1、2、3 ... 9がスコアを形成し、その値は正確に1/3です。どのようにグループ化するのですか?
次のプログラムはこの機能を実装しています。下線部分に不足しているコードを入力してください。
注:不足しているコンテンツのみを入力し、タイトルに既存のコードや説明テキストを記述しないでください。

 回答案:{t = x [k]; x [k] = x [i]; x [i] = t;}


#include <stdio.h>
 
void test(int x[])
{
	int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
	int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];
	
	if(a*3 == b) 
		printf("%d / %d\n", a, b);
}
 
void f(int x[], int k)
{
	int i, t;
	if(k >= 9){
		test(x);
		return;
	}
	
	for(i=k; i<9; i++){
		{t=x[k]; x[k]=x[i]; x[i]=t;}
		f(x,k+1);
//		_____________________________________________ // 填空处
		{t=x[k]; x[k]=x[i]; x[i]=t;}
	}
}
	
int main()
{
	int x[] = {1,2,3,4,5,6,7,8,9};
	f(x, 0);	
	return 0;
}

質問6足し算と掛け算

1 + 2 + 3 + ... + 49 = 1225 
ここで、結果が2015になるように、隣接していない2つのプラス記号を乗算記号に変換する必要があります。
例:
1 + 2 + 3+。 .. + 10 ∗ 11 + 12 + ... + 27 ∗ 28 + 29 + ... + 49 = 2015 
は、要件を満たす答えです。
別の考えられる答えを探して、前の位置にある乗算記号の左側にある番号を送信してください(たとえば、10 1010を送信してください)。
注:送信する必要があるのは整数です。余分なコンテンツは入力しないでください。

回答:16 

#include <iostream>
using namespace std;

void solve(){
	int first, second;
	for(first = 1; first <= 48; first++){
		if(first == 10){
			continue;
		}
		for(second = first + 2; second <= 48; second++){
			int res = 0, i = 1;
			while(i <= 49){
				if((i == first) || i == second){
					res += i * (i+1);
					i += 2;
				}else{
					res += i;
					i++;
				}
			}
			if(res == 2015){
				cout << first;
			}
		}
	}
}

int main(int argc, char** argv) {
	solve();
	return 0;
}

 

おすすめ

転載: blog.csdn.net/weixin_44566432/article/details/115055890