暴力的な列挙については、これらを知っておく必要があります

Lanqiao Cupアルゴリズムの種類についての説明欄を次に示します。列挙アルゴリズム、再帰アルゴリズム、動的計画法アルゴリズムなどの一部のアルゴリズムは、グラフィカルな方法で説明されています。学生の皆さん、ぜひご覧ください。この記事は公式アカウントで公開されます活力アルゴリズム
最新の記事や関連する準備資料を入手するには、公式アカウントに注目してください。

序文

ブルーブリッジカップと言えば、バイオレンスカップのことを言っているかもしれませんが、過去のいくつかの質問を通して、過去数年間の最初のいくつかの質問が列挙されて最良の答えが見つかったことがわかります。最後のいくつかの質問でも、あなたは暴力の列挙を使用して実行できます。いくつかの答えを与え、いくつかのポイントを取得します。暴力を振るう人には世界があると言えますが、以下に暴力の列挙について話しましょう。下の図はこの記事の概要です。
ここに画像の説明を挿入

列挙型の定義

あなたが最初にアルゴリズムに触れたとき、誰もが実践した基本的なアルゴリズムは、9 * 9の九九の印刷、水仙の数の検索、素数の検索など、すべて列挙アルゴリズムに関するものでした。このような質問は常にあります特定の検索の答えの条件を満たしているの範囲内に
列挙アルゴリズムのコアアイデアは次のとおりです:可能なすべてを列挙する

ケース紹介

タイトル説明

すべての「水仙番号」を出力します。いわゆる「水仙番号」とは、立方体の合計が番号自体と等しい3桁の番号を指します。たとえば、153は「水仙番号」です。理由は次のとおりです。153= 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3。

トピック分析

最初のステップ:ここで決定する必要があるのはループ変数です。変数は3桁の数字であると考えるのは簡単です。このステップで、変数を決定します。

ステップ2:変数の範囲を決定します。範囲が決定された後でのみ、どの数値を見つけるかを知ることができます。この数値が整数であり、次に3桁の数値であることがわかります。

ステップ3:どこにあるかはすでにわかっているの場合は、1つずつトラバースして判断します。ここでは、3桁を3回順番に分割し、それらを加算して、最後に判断を下す必要があります。

トピックコード

#include<iostream>
using namespace std;
//判断条件
bool check(int num)
{
    
    
	int a = num%10;
	int b = num/10%10;
	int c = num/100;
	return a*a*a + b*b*b + c*c*c == num;
} 
int main()
{
    
    
    //确定范围
	for(int i = 100; i <= 999; i++)
	{
    
    
		if(check(i))
		{
    
    
			cout << i <<ends;
		}
	}
	return 0;
} 

列挙テンプレート

上記の分析によると、合計3つのステップがあります。ここでは、3Wとして要約します。

  • 誰が:いくつかのループ変数を表します、いくつかのループ変数があります、いくつかのループがあります
  • ここで、変数の範囲を表します。
  • 方法:操作とフィルタリングの方法を示します。
    ループ変数の操作と判断がこのテンプレートの焦点です
//简单版本

//how:筛选满足的条件
bool check(*arg)
{
    
    
    
}
int main(){
    
    
    /*who:确定几个变量就有几个循环*/
    /*where:判断变量的范围,模板中的 a,b表示范围*/
    for(int i = a; i < b; i++)
    {
    
    
        for(int j = a; j < b; j++)
        {
    
    
            ...
            for(int z = a; z < b; z++)
            {
    
    
                //how1.对变量进行操作。
                
                //how2.对变量进行判断
                if(check(*args))
                {
    
    
                    //do
                }
            }
        }
    }
}

活力トレーニング

トピック1:ビールと飲み物

ビールは1缶あたり2.3元、飲み物は1缶あたり1.9元です。シャオミンはビールと飲み物を合計82.3元で購入しました。また、彼が飲み物よりもビールを購入したことが少ないこともわかっています。彼が購入した缶の数を数えてください。

問題分析:

  • 誰が:この質問のループ変数はビールの数と飲み物の数です
  • ここで、ビールの最小数は1、最大数は82.3 / 2.3です。飲料の最小数は1、最大数は82.3 /1.9です。
  • 方法:判断には2つの条件があります:1。購入したビールの量が飲み物の量より少ない2.総費用は82.3です。
  • 2つの浮動小数点型の同等性を判断する方法については、fabs関数を使用してください

質疑応答

#include<iostream>
#include<math.h>
using namespace std;
bool check(int i,int j)
{
    
    
	//判断价格是否等于82.3 
	return (fabs(i*2.3+j*1.9 - 82.3) <= 1e-5); 
} 
int main()
{
    
    
	//啤酒 
	for(int i = 0; i < 82.3/2.3; i++)
	{
    
    
		//饮料 
		for(int j = i+1;j < 82.3/1.9; j++)
		{
    
    
			if(check(i,j))
			{
    
    
				cout << i <<ends << j <<endl;
			}
		}
	}
	return 0;
}

トピック2:トレーニングの実行

XiaoMingはランニングトレーニングを行う予定です。
当初、シャオミンは体力に溢れており、体力は1万人と計算されています。シャオミンが走った場合、彼は毎分600スタミナを失います。シャオミンが休むと、彼は毎分300体力を上げます。体力の増減は一律に変化します。

Xiao Mingは、1分間走り、1分間休憩し、さらに1分間走り、さらに1分間休憩する予定です...など。シャオミンの体力がいずれかの時点で0に達すると、彼は運動を停止します。

Xiao Mingはどのくらい運動をやめますか?答えを整数にするには、秒単位で答えを出力してください。回答の単位ではなく、番号のみを入力してください。

トピック分析

  • 誰が:この質問では、体力はループ変数であるため、ループは1つだけです
  • ここで、問題の体力の変化の場合、初期値は1000であり、体力がゼロになるとサイクルが終了します。ここでは明確ではありません
  • 方法:体力値がゼロであるかどうかを判断するために、時間を出力し、同時にループから飛び出すことができます

質疑応答

#include<iostream>

using namespace std;

int main()
{
    
    
	int n = 10000;//体力最开始的值
	int run = 600/60;//每秒的消耗 
	int time = 0;//时间
	//who:循环变量
	while(n)
	{
    
    
	    //how2:判断
	    //当剩余体力不满足再跑一次时候,压榨最后一点体力,然后跳出循环
	    if(n-600 < 0)
	    {
    
    
	        time += n/run;
	        break; 
	    }
	    
	    //how1:对体力进行操作
	    //跑步
	    n -= 600;
	    n += 300;
	    //加上两分钟
	    time += 120;
	}
	cout << time << endl;
	return 0;
} 

質問スタイル

暴力的な列挙の基本的な用途は上記のとおりであり、ブルーブリッジカップのスタイルは絶えず変化しているため、継続的な練習が必要です。一般的に、練習は完璧です。長年にわたる質問のスタイルを要約すると、嵐橋の質問作成者は主に3つの側面で列挙アルゴリズムを調査していることがわかりました。

1.シミュレーションの質問
これは主に、10進数へのバイナリ変換、トレーニングの実行などの基本的な知識ポイントを調べます。一般に、質問の要件に従ってシミュレーションし、変数を操作して、結果を取得します
。数学の質問
基本的な数学の能力、心配しないでください、数学の能力の要件はそれほど高くなく、高校レベルはそれを扱うことができます。
3.日付の質問。
このタイプの質問は日常的な質問である必要があります。日付の年、月、日の関係を処理できる必要があります。このタイプの質問は2、3回、さらに注意して行う必要があります。エクセルのボスはそれをスキップすることができます。

研究の提案

  1. プログラミングの基礎に関する100の質問:基礎知識があまりしっかりしていないと感じた場合は、100の質問すべてに合格することができます。これにより、自分の力が大幅に向上します。これはXiaobaiを対象としています。リンク:プログラミング入門のための100の質問
  2. オイラープロジェクト:特に学生の数学的思考を育成し、問題を解決するために数学的方法を使用することを学ぶこと。リンク:プロジェクトオイラー
  3. ブルーブリッジカップリアルテスト:上記を終えるとリアルテストが受けられます。リンク:リアルブルーブリッジカップ

学習リソース

インターネット上でいくつかの学習リソースを収集しました。リンクは失敗しやすいので、公式アカウントに従って言及してください。リソースはインターネット上で収集されているため、ビジネスには使用しないでください。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/kiwi_berrys/article/details/113094786