gpt4 book ai didi

c++ - 如何在迭代数组时对 "unlike"元素进行分组(例如 :{1, 2,2,1,3,3,3,2,1,1} 到 {1,2}{2,1,3}{3}{3,2, 1}{1})?

转载 作者:太空狗 更新时间:2023-10-29 20:55:04 25 4
gpt4 key购买 nike

我有数组

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");
}
}

可以像这样迭代数组打印结果而不需要任何临时变量吗?

最佳答案

int a[] = {1,2,2,1,3,3,3,2,1,1};

int prev = a[0];
bool first = false;
printf("%d", prev);

for (int i=1; i < sizeof(a) / sizeof(int); ++i) {
int curr = a[i];
if (curr != prev) {
// start a new line for a new group
printf("\n");
first = true;
}
if (!first) {
// print a space after each element
printf(" ");
}
printf("%d", curr);
first = false;
prev = curr;
}

关于c++ - 如何在迭代数组时对 "unlike"元素进行分组(例如 :{1, 2,2,1,3,3,3,2,1,1} 到 {1,2}{2,1,3}{3}{3,2, 1}{1})?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com