C / C ++プログラミング学習-8週目集団訴訟をスキップ

トピックリンク

タイトル説明

大学に行ってから、Susuはclass =をスキップすることを学びました。=!しかし、クラスをスキップするときはまだ選択肢があり、ひざまずいているときに特定のコースを聴き終える必要があります。ここで、特定の日のコースシーケンスが与えられた場合、1を使用して重要なコースを示し、0を使用して重要性の低いコースを示します。Susuは常に、次のルールに従ってクラスをスキップします。

  1. 重要なコースを受講しないでください。
  2. 最初の重要なレッスンの前のすべてのレッスンはノックアウトされます。
  3. 重要でないコースが2つ以上接続されている場合、これらの重要でないコースはすべてノックアウトされます。
  4. 最後の重要なコースの後にすべてのレッスンをノックアウトします。
  5. 当日重要なコースがない場合は、すべてのコースをノックアウトしてください。
  6. そんな高度な授業スキップの考え方の指導の下、ススは毎日何回授業を受けることができるのでしょうか。

入る:

最初に正の整数T(T <= 150)を入力します。これは、テストするグループの数を意味します。次の各テストデータには、2つの行が含まれています。1行目は正の整数n(1 <= n <= 1000)で、特定の日のコースの総数を示し、2行目はn個の整数(0または1のみ)であり、これらのnコースの重要性を示します。 。

出力:

テストデータのセットごとに、SuSunengによって教えられたレッスンの数を出力します。

サンプル入力

2
5
0 1 0 1 1
7
1 0 1 0 0 1 0

サンプル出力

Case #1:4
Case #2:4

アイデア

タイトルで指定されたスキップルールに従ってクラスをスキップします。番号1のクラスをスキップしないでください。最初の1が表示される前にすべてのクラスをスキップしてください。1と1の間に2つ以上の0がある場合、これらの0はすべてスキップ;最後の1クラス以降のすべてのクラスがスキップされます;クラス1がない場合、その日のすべてのクラスがスキップされます。

C ++コード:

#include<bits/stdc++.h>
using namespace std;
int n, t, num = 0, first, last, a[1005];
int main()
{
    
    
	
	while(cin >> t)
	{
    
    
		for(int i = 0; i < t; i++)
		{
    
    
			cin >> n;
			num = 0, first = -1, last = -1;
			memset(a, 0, sizeof(a));
			for(int j = 0; j < n; j++)
			{
    
    
				cin >> a[j];
				if(a[j] == 1 && first == -1)
				{
    
    
					num++;
					first = j;
					last = j;
				}
				else if(a[j] == 1)
				{
    
    
					num++;
					last = j;
				}
			}
			for(int j = first; j < last; j++)
				if(a[j] == 0&&a[j - 1] != 0 && a[j + 1] != 0)
					num++;
			cout << "Case #" << i + 1 << ":" << num << endl;
		}
	}
	return 0;
} 

おすすめ

転載: blog.csdn.net/qq_44826711/article/details/113079973