用于循环并消除重复

时间:2015-10-24 18:32:39

标签: c++ loops for-loop break cout

Geeting! 我正在研究一个控制台应用程序,它读入数字将它们放在一个数组中,输出告诉你这些数字位于数组大于1000的位置。 所以如果你有这样的数组:

int be[] = { 1001, 1001, 1001, 101, 1001 };

输出应告诉您,从第一个位置到第三个位置,您有1000多个数字,从第五个位置到最后一个位置,您有1000多个数字。结果就是这样:

1 3 5 6

我用for解决了它,如果是这样的话:

for (int i=1;i<=5;i++)
    {
        if (be[i]>=1000)
            {
                cout<<i<<" ";
                for (int j=1;j<5-1;j++)
                {
                   if (be[i+j]<=1000)
                   {
                      cout<<i+j-1<<" ";
                      break;
                   }
                }
            }
     }

主要问题是结果如下:

1 3 2 3 3 3 5 6

所以在休息之后,我希望第一个for循环继续在secont结束的地方,但我不知道该怎么做。如果有人从这个模糊的解释中得到了基本的想法,可以给我一些提示或提示,我将非常感激!

5 个答案:

答案 0 :(得分:2)

你只需要一个循环和一堆检查。 这是一些伪代码:

loop through elements
    if number > 1000 and not started
       print index
    else if number <=1000
       started = false
       print index-1
if started = true
    print index - 1 // last element of array

答案 1 :(得分:1)

唯一的评论:你的数组中没有第6个位置,这就是为什么我将5 5 lik 从第5个元素输出到第5个元素 http://ideone.com/k3gF03

int main(void) {
    int be[] = { 1001, 1001, 1001, 101, 1001 };
    int beSize = (sizeof(be)/sizeof(*be));
    bool fl = false;
    int i=0;
    for (i;i<beSize;i++)
    {
        if (be[i]>=1000)
        {
            if (!fl) {
                fl=true;
                cout<<i+1<<" ";
            }
        } else {
            if (fl) {
                fl=false;
                cout<<i<<" ";
            }
        }
     }
     if (fl) { cout<<i<<" "; }
    return 0;
}

答案 2 :(得分:0)

让第一个循环继续,第二个循环结束只是那样做

int j = 1;
for (int i=j;i<=5;i++)
{
    if (be[i]>=1000)
        {
            cout<<i<<" ";
            for (;j<4 and be[i+j]>1000 ;j++);
            if(j < 5 ) 
            {
              cout<<i+j-1<<" ";
            }
        }
 }

还没有真正检查它是否符合您的要求?

答案 3 :(得分:0)

如果我理解正确,您需要以下内容

#include <iostream>

int main()
{
    const size_t low_bound = 1000;

    int be[] = { 1001, 1001, 1001, 101, 1001 };
    const size_t N = sizeof( be ) / sizeof( *be );

    for ( int x : be ) std::cout << x << ' ';
    std::cout << std::endl;

    for ( size_t i = 0; i < N; i++ )
    {
        if ( be[i] >= low_bound )
        {
            size_t j = i + 1;
            while ( j < N && be[j] >= low_bound ) j++;
            --j;
            std::cout << i + 1 << "-" << j + 1 << " ";
            i = j;
        }
    }

    std::cout << std::endl;
}

程序输出

1001 1001 1001 101 1001 
1-3 5-5

考虑到数组索引从0开始。

答案 4 :(得分:0)

非常简单且不礼貌的代码。抱歉。 c ++中的数组以索引0开头。因此存在第一个虚拟元素。

int be[] = { 99, 1001, 1001, 1001, 101, 1001 }; // 99 is dummy
bool in=false;
int j;
int i;
for (i=1;i<=5;i++)
{
    if (be[i]>=1000 && in==false)
    {
        in=true;
        cout << i << " ";
    }
    if (be[i]<1000 && in==true)
    {
        in=false;
        cout << i-1 << " ";
    }
}

if (be[i]<1000 && in==true)
   cout << i << " "; // or i-1 if you prefer the last one