厳格に減少してから増加するか、厳格に減少するか、厳格に増加するシーケンスをチェックする
数字のシーケンスを確認する
n個の整数を並べたシーケンスSが与えられています。つまり、S = s1、s2、...、snです。s1、s2、...、siとsi+1、si+2、...、sn(0 ≦ i ≦ n)という二つのパートにSを分割することができるかどうかを計算してください。ただし、最初のパートは厳格に減少し、二番目のパートは厳格に増加している必要があります。
注意:xがyより厳格に大きいとは、x > yのときを言います。
したがって、厳格に増加するシーケンスは1 4 8のようになります。しかしながら、1 4 4は厳格に増加するシーケンスではありません。
つまり、シーケンスの数字が減少している場合、ある地点で増加し始める可能性があります。そして、一度数字のシーケンスが増加し始めると、それ以上どこでも減少することはできません。
厳格に増加する数字だけ、または厳格に減少する数字だけから構成されるシーケンスも有効なシーケンスです。そのため、どちらのケースもtrueを出力してください。
単純にtrueかfalseを出力するだけで良く、シーケンスを分割する必要はありません。
入力フォーマット:
行1:整数'n'
行2以降:'n'行に渡る'n'個の整数(それぞれの行に1つの整数)
出力フォーマット:
"true"または"false"(引用符なし)
制約:
1 ≦ n ≦ 10^7
サンプル入力1:
5
9
8
4
5
6
サンプル出力1:
true
サンプル入力2:
3
1
2
3
サンプル出力2:
true
サンプル入力3:
3
8
7
7
サンプル出力3:
false
サンプルフォーマット3の説明:
8 7 7は厳格に減少していないため、出力はfalseです。
サンプル入力4:
6
8
7
6
5
8
2
サンプル出力4:
false
サンプル入力4の説明:
このシリーズは次の通りです:
8 7 6 5 8 2
これは最初に厳格に減少します(8 7 6 5)。その後、厳格に増加します(5 8)。しかし、再び厳格に減少し始めます(8 2)。したがって、このテストケースの出力は'false'です
解答
#include<iostream>
using namespace std;
int main() {
int n;
cin>>n;
bool a;
int count=0;
int num[n];
for(int i=0;i<n;i++)
{
cin>>num[i];
}
for(int i=0;i<n;i++)
{
if(num[i]>num[i+1])
{
a=true;
count++;
}
else
{
a=false;
break;
}
}
for(int i=count;i<n;i++)
{
if(num[i]<num[i+1])
{
a=true;
count++;
}
else
{
a=false;
break;
}
}
for(int i=count;i<n;i++)
{
if(num[i]<num[i+1])
{
a=true;
count++;
}
else
{
a=false;
break;
}
}
for(int i=count;i<n;i++)
{
if(num[i]>num[i+1])
{
a=true;
count++;
}
else
{
a=false;
break;
}
}
if(a==1)
{
cout<<"true";
}
else
{
cout<<"false";
}
}
フルスクリーンモードを解除する
この問題を解決するためのより良いアプローチを提案してください
git
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/suryanshcode/check-the-sequence-strictly-decreasing-than-increasing-strictly-decreasing-strictly-increasing-1e1d