如何通过用户输入创建数组?

问题描述

我有一个 C++ 问题:

输入一个数字[ 0 - 9 ]并以三个9连续结尾的序列,在标准输出上打印由三个连续相等数字组成的子序列在标准输出上的个数。

示例:给定序列 { 1 2 2 2 2 0 0 3 3 3 7 9 9 9 },确定子序列:
{ 2 2 2},{ 2 2 2 },{ 3 3 3 } .
因此,程序应该在标准输出上打印数字 3,等于存在的序列。

我尝试使用数组。我的代码最终是这样的:

int main(){
    int i;
    int N = 0,A[100];
    
    
    while( (A[i] && A[i+1] && A[i+2]) != 9 ){
        N++;
    
        for( i = 0; i <= N; i++ ){
            cout << "A[" << i + 1 << "]:";
            cin >> A[i];
        }
        for(int i = 0; i <= N; i++ ){
            cout << "A[" << i + 1 << "]:" << A[i];
        }   
    }
}

我的问题是,我不知道如何以三个 9 连续终止序列。所以我尝试使用数组。我希望有人可以帮助我详细说明这个想法。

解决方法

当找到三个连续的 9 时,您可以通过中断循环来做到这一点。

#include <iostream>

const int ARRAY_SIZE = 100;

int main(){
    int i;
    int N = ARRAY_SIZE,A[ARRAY_SIZE];

    for( i = 0; i < ARRAY_SIZE; i++ ){
        std::cout << "A[" << i + 1 << "]:";
        std::cin >> A[i];
        // stop when three consecutive 9 is found
        if (i >= 2 && A[i - 2] == 9 && A[i - 1] == 9 && A[i] == 9){
            N = i + 1;
            break;
        }
    }

    for(int i = 0; i < N; i++ ){
        std::cout << "A[" << i + 1 << "]:" << A[i] << '\n';
    }

    return 0;
}
,

您需要的不是元素数等于幻数 100 的数组,而是正好包含三个元素的数组。

这是一个演示程序。

#include <iostream>

int main() 
{
    const size_t N = 3;
    int a[N];
    
    size_t count = 0;
    
    for ( size_t i = 0,j = 0; std::cin >> a[j++];  )
    {
        j %= N;
        
        if ( i != N - 1 )
        {
            ++i;
        }           
        else
        {
            size_t k = 1;
            while ( k < N && a[k] == a[k-1] ) k++;
            
            if ( k == N )
            {
                if ( a[0] == 9 ) break;
                else ++count;
            }
        }
    }
    
    std::cout << "count = " << count << '\n';
    
    return 0;
}

如果输入数字序列

1 2 2 2 2 0 0 3 3 3 7 9 9 9

那么程序输出将是

count = 3

您可以使用算法 std::all_of 来代替内部 while 循环。