【发布时间】:2016-08-28 06:13:15
【问题描述】:
我有数组
int a[]={1,2,2,1,3,3,3,2,1,1};
如果我想在迭代时对相同的元素进行分组(没有任何临时变量或数组来存储或复制元素),例如,在迭代时在一行中打印相同的元素:
1
2 2
1
3 3 3
2
1 1
我可以有这样的 for 循环和 if 条件:
#include <stdio.h>
int main(){
int a[]={1,2,2,1,3,3,3,2,1,1};
for(int i=0,j=0;i<sizeof(a)/sizeof(int);i++){
if(i==sizeof(a)/sizeof(int)-1 || a[i]!=a[i+1]){
for(;j<=i;j++){
printf("%d ",a[j]);
}
printf("\n");
}
}
return 0;
}
但现在我想在迭代时对“不同”元素进行分组:每个组附近没有相同的元素:
1 2
2 1 3
3
3 2 1
1
是否有可能有类似于以前版本的解决方案
for(int i=0,j=0;i<sizeof(a)/sizeof(int);i++){
if(...){
for(;j<=i;j++){
printf("%d ",a[j]);
}
printf("\n");
}
}
可以在没有任何临时变量的情况下迭代数组以打印这样的结果?
【问题讨论】:
-
如果一个元素与下一个元素相同,打印一个
'\n'。最后要小心。 (或者反过来,检查是否和前面一样,一开始要小心)。 -
@amuse 如果您不想使用任何临时变量,请参阅我的解决方案。
-
@TimBiegeleisen meta.stackoverflow.com/questions/322319/…
标签: c++ arrays algorithm for-loop iterator