タイトルは、
道路上に長さ L の並木があり、2 本の木の間の距離が 1 メートル、つまり 0、1、2、3、...、L メートルであることを示しています。 、位置はすべてです 木があります;
地下鉄の建設に使用されるエリアがいくつかあります; エリアは始点と終点で表されます、始点と終点は両方とも整数、整数メートルです; 今エリア内の木 (2 つのエンドポイントを含む) を削除する必要があります。計算は、
エリア内の木の後に残りの木の数を削除することです。
サンプル入力
500 3
150 300
100 200
470 471
サンプル出力: 298
元のプログラムは次のようなものです。
MFC バージョンを実行しましょう。VC6 は新しいダイアログ プロジェクトを作成します。
設計インターフェイスは次のとおりです。
エディット ボックスにすべて UINT 型のメンバー変数を追加します。
インターフェイスに別のボタンを追加し、ボタンのクリック機能を追加します。
m_cnt はエリアの数で、各計算には 1 ~ 4 のエリアを含めることができ、m_cnt に対応するエディット ボックスは 1 ~ 4 にのみ入力できます。
次のメンバー変数をダイアログ ボックスのヘッダー ファイルに追加します。
プライベート:
int a[10000], i, j, m;
a、大容量配列の定義、
i、ループ変数、
m、今回計算される間隔の数。
j、最終結果。
さらに、結果を表示するには、UINT 型のメンバー変数 m_result を追加する編集ボックスをインターフェイスに追加する必要があります。
ダイアログ ボックスの初期化関数 CShutestDlg::OnInitDialog() では、配列 a が初期化され、結果は j になります。
memset(a, 0, sizeof(a));
j = 0;
プロジェクトの名前は最も静かです。
ボタンクリック機能、
void CShutestDlg::OnShuCalc()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m = m_cnt;
//在这次的区间数中循环
for(int k=0; k<m; k++)
{
if(k==0)
{
for(i=m_qj1; i<=m_qj2; i++)
{
a[i] = 1;
}
}
if(k==1)
{
for(i=m_qj3; i<=m_qj4; i++)
{
a[i] = 1;
}
}
if(k==2)
{
for(i=m_qj5; i<=m_qj6; i++)
{
a[i] = 1;
}
}
if(k==3)
{
for(i=m_qj7; i<=m_qj8; i++)
{
a[i] = 1;
}
}
}
for(i=0; i<=m_sum; i++)
{
if(a[i] != 1)
{
j = j+1;
}
}
m_result = j;
UpdateData(FALSE);
}
プログラムを起動し、データを入力してボタンをクリックすると、次のように計算されます。
継続して計算することはできません。別の状況を計算したい場合は、プログラムを再起動する必要があります。
改善する時期があり、入力例外処理を追加します。