【问题标题】:How to create array by user input?如何通过用户输入创建数组?
【发布时间】:2021-09-05 11:31:11
【问题描述】:

我有一个 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 时停止应该是微不足道的。
  • 或者,使用std::vector 及其自动调整大小的属性。
  • 问题标题似乎与问题内容毫无共同之处。这使得这个问题对未来的提问者不太有用。如果您正在寻求有关检测子序列的帮助,您是否会费心阅读有关用户创建数组的问题?

标签: c++ arrays loops for-loop subsequence


【解决方案1】:

当找到三个连续的 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;
}

【讨论】:

  • 谢谢,代码有效!但是,为了计算子序列,我把 if( A[i] == A[i+1] && A[i+1] == A[i+2] ){ count++;辛 >> A[i]; } 休息后; } 但没有工作
  • A[i+1]A[i+2] 在此时未初始化,因此您不能使用它们的值。
  • 是的,你说得对,我刚刚意识到这一点。所以我改为 if( i >= 2 && A[i - 2] == A[i - 1] && A[i - 1] == A[i] ){ count++; },它的工作原理!
【解决方案2】:

您需要的不是元素数量等于幻数 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 循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多