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结束的地方,但我不知道该怎么做。如果有人从这个模糊的解释中得到了基本的想法,可以给我一些提示或提示,我将非常感激!
答案 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