c++ 支票编号规则

u0njafvf  于 2023-01-28  发布在  其他
关注(0)|答案(4)|浏览(108)

给S一个n个整数的序列,即S = s1,s2,...,sn。计算是否可以将S分成两部分:s1,s2,...,si和si +1,si +2,...,sn(0 ≤ i ≤ n),使得第一部分严格递减,而第二部分严格递增。当x〉y时,我们说x严格大于y,所以严格增数列可以是148,但144不是严格增数列.
也就是说,在序列中,如果数字是递减的,它们可以在某个点开始递增。一旦数字开始递增,它们就不能在任何点进一步递减。由递增数字或递减数字组成的序列都是有效的序列。因此,在这两种情况下,都打印true。
你只需要打印真/假,不需要拆分序列。
输入格式:
第1行:整数"n"
生产线2及以后:"n"行上的"n"个整数(每行上的单个整数)
输出格式:
"真"或"假"(不带引号)
制约因素:
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

样本格式三说明:
8 7 7不是严格递减的,所以输出为假。
样本输入4:

6
8
7
6
5
8
2

示例输出4:

false

样本输入4的说明:
该系列为:八七六五八
它首先严格减少(8 7 6 5)。然后严格增加(5 8)。但随后又开始严格减少(8 2)。因此,此测试用例的输出为"假"

#include<iostream>
    using namespace std;

int main() {
    
    int n;
    cin >> n;
    int p;
    cin >> p;
    bool isDec = true;
    int i = 1,c;
    while(i <= n - 1){
        cin >> c;
        
        if(c > p){
            if(isDec == true){
            isDec = false;
            }
            isDec = true;
            p = c; 
        } else if(c < p){
            if(isDec == false){
            isDec = false;
            }
            isDec  = true;
            p = c;
        } else {
            isDec = false;
            break;
        }
        
        i++;
    }
    
    if(isDec){
    cout << "true" << endl;
    } else{
        cout << "false" << endl;
    }
}

这段代码有什么问题?它在上一个测试用例中失败了。

5gfr0r5j

5gfr0r5j1#

#include<iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    int current_term;
    cin>>current_term;
    bool isDecreasing = true,is_valid_sequence_yet=true;
    int i=2;// first term of sequence has already been taken
    while(i<=n){
        int next_term;
        cin>>next_term;
        if(is_valid_sequence_yet && isDecreasing && current_term>next_term){
            current_term=next_term;
            isDecreasing=true;
        }else if(is_valid_sequence_yet && current_term < next_term){
            current_term=next_term;
            isDecreasing = false;
        }else{
            is_valid_sequence_yet=false;
        }
        i++;
    }
    if(is_valid_sequence_yet){
        cout << "true" << endl;
    }else{
        cout << "false" <<endl;
    }
}
ilmyapht

ilmyapht2#

import java.util.*;
public class test{
public static void main(String args[]){
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int arr[]=new int[n];
for(int i=0;i<n;i++){
    arr[i]=s.nextInt();
}
boolean flag=true;
for(int i=0;i<n-2;i++){
   if((arr[i]<arr[i+1])&& arr[i+1]>arr[i+2])){
       flag=false;
         break;
      }
 }
 System.out.print(flag);
 }
}
kpbwa7wx

kpbwa7wx3#

int num , temp = 1 , i =1  ;
cin>>num;
bool Isdec = true;
int Previes_num , current_num;
cin>>Previes_num;

  while(i <= num-1){
      
      cin>>current_num;
      
    if(Previes_num > current_num){
          if(Isdec){
              Isdec = true ;
            temp++;
          }
        else{
            cout<<"false";
            return 0;
        }
    }    
      
    else if(current_num > Previes_num){
          if(Isdec){
              Isdec = false ;
          }
        
    }
     else{
         cout<<"false";
         return 0 ;
     } 
      ++i;
      Previes_num=current_num;
      
  }
    if(temp==num){
        cout<<"true";
    }
    else if(Isdec == 0){
        cout<<"true" ;
    }
    
return 0;

}

643ylb08

643ylb084#

#include<iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    cout << endl;

     int t1,t2; // two consecutive terms

     cin >> t1;
     cout << endl;

     bool changed=false; // this will turn true once the series has switched to increasing mode
     bool result=true; // we will change it to flase if any condition is voilated 

     for(int i=2;i<=n;i++) { // i=2 since we already took one input

         cin >> t2;
         cout << endl;

         if (t1>t2) {
             if (changed == true) {//we are in the increasing part 
                 result = false; //since now the terms are decreasing but we are in incresaing part the series is no longer valid
             }
         }

         else if (t1<t2) {
             if ( changed == false) { 
                 changed = true;  // the series has now changed to increasing series if it wasn't before
             }
         }

         else  {
             result = false; // if tow terms are equal the result is automatically false
         }
         t1=t2; // replacing the terms to get new input
     }
     if (result) cout << "true"; // if we dont do this we get 0,1 as output
     else cout << "false";

}

我们需要设置两个布尔值,如图所示。一旦我们的数列从递减变为递增,我们就将change设置为true
如果我们已经将change设置为true,但是我们的数列再次从递减变为递增,我们将result bool设置为false。
最后,我们可以输出result来得到我们需要的答案。
如果我们得到两个连续项相等,我们直接将result设置为false,因为它直接违反了严格递增或严格递减的条件。
我们不会在任何地方使用break,因为用户需要给予所有输入,然后显示结果。
至于调试你的代码,你需要改变你的方法。还有,你甚至打算通过这样做来完成什么:

if(isDec == false){
            isDec = false;
            }

相关问题