简单问题,高分奉送

ratrat 2001-11-29 03:50:10
一个莱鸟级数组问题:
一数组arrayA[]={23,13,42,98,23,13,13,56,42,87,42,56,42}通过编程将数组中的相同元素去掉,只保留一个,形成另一个数组arrayB[]={23,13,42,98,23,56,87,56},计算数组B的元素个数。
...全文
92 点赞 收藏 13
写回复
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xddjd 2001-11-29
哇,我都看不懂,我是初学者,你这个list用的也太厉害了,对于数组我建议你用vector,他是连续的,而list是离散的,而且list要是以array为基本类型数据,就太复杂了.list的初始化也很麻烦.
回复
ghostliu 2001-11-29
我的方法不好:
1。数组B被固定了大小
2。我将它初始化为零,如果数组A里有0这个数,我的程序就要出错了。
还是 xddjd()老兄的方法好。用向量来处理数组的问题要好得多。可惜我对向量不是很熟悉。 
回复
flybird70 2001-11-29
非常谢谢各位!to xddjd() ,ghostliu(),trcd2000(胖子)
烦请各位再帮我看一下下面2种写法错在那里?我马上另开贴子加160分(我所能加的最高分)
1:
void Filter( list<IntArray>& combs)
{
IntArray temp;
list<IntArray>::iterator iter;
for( iter = combs.begin(); iter != combs.end();iter++)
{
IntArray& array = *iter;

for( int i = 0; i < array.size(); i++ ) {
for( int j = i+1; j < array.size(); j++ ) {
int d = abs(array[i] - array[j]);
if( find( temp.begin(), temp.end(), d) != temp.end() ) {
temp.push_back(d);
}
}
}
if( temp.size() != n ) {
list<IntArray>::iterator old_iter = iter;
iter++;
combs.erase(old_iter);
} else {
iter++;
}
}
}
2:
void Filter( list<IntArray>& combs)
{
IntArray temp;
list<IntArray>::iterator iter;
for( iter = combs.begin(); iter != combs.end();iter++)
{
IntArray& array = *iter;


for( int i = 0; i < array.size(); i++ ) {
for( int j = i+1; j < array.size(); j++ ) {
int d = abs(array[i] - array[j]);
{ temp.push_back(d); }
}
}

int count=0;
for( i = 0; i < temp.size(); i++ ) {
for( int j = i + 1; j < temp.size(); j++ ) {
if( temp[i] == temp[j] )break;
if (j == temp.size() ) count++;
}
}

list<IntArray>::iterator old_iter;
if( count != n) {
old_iter = iter;
iter++;
combs.erase(old_iter);
} else {
iter++;
}

回复
trcd2000 2001-11-29
arrayB[0]=arrayA[0];
k=1;
for(i=1;i<N;i++)
{ for(j=0;j<i;j++)
{ if(arrayA[i]==arrayA[j]) break;
}
if(j==i) arrayB[k++]=array[i];
}
只能说你试试再说吧
回复
ghostliu 2001-11-29
int arrayA[]={23,13,42,98,23,13,13,56,42,87,42,56,42};
int arrayB[13];
memset(arrayB,0,sizeof(arrayB));//数组B清零
arrayB[0] = arrayA[0];//第一个元素就不用比了
int iLength = sizeof(arrayA)/sizeof(int);//数组A的长度
bool bEqual;
int iCount = 1;//数组B的计数器
for (int i = 1;i<iLength;i++)
{
bEqual = FALSE;
for(int j=0;j<i;j++)
{
if(arrayA[i] == arrayA[j])
bEqual = TRUE;
}
//元素i前面若没有与i相等的,就将i加到数组B里面去
if(FALSE==bEqual)
{
arrayB[iCount] = arrayA[i];
iCount++;
}
}

我运行通过了的,应该没问题了吧?
回复
xddjd 2001-11-29
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

void main(void)
{
const int ARRAY_SIZE = 13 ;
int IntArray[ARRAY_SIZE] = {23,13,42,98,23,13,13,56,42,87,42,56,42} ;
vector<int> IntArrayB;
int *location ; // stores the position of the first
// matching element.


int j = 0;
for(int i = 0 ; i < ARRAY_SIZE; ++i)
{
location = find(IntArrayB.begin(), IntArrayB.end(),IntArray[i] ) ;

if (location == IntArrayB.end())


IntArrayB.push_back(IntArray[i]);

}

cout << "the arrar size is: "<<IntArrayB.size();
cout <<"the element are: "<<endl;
for(i = 0; i < IntArrayB.size() ; ++i)
cout << IntArrayB[i] << ends;
cout << endl;


}

先生成一个vector,生成的数组定义时要知道其长度,假如初始化为0,那后面几个数会一直为0,假如不初始化,那后面几个数显示时是非常大的一个负值错数.
回复
ratrat 2001-11-29
如果能解决问题,可加分。
不好意思,问题中的arrayB[]={23,13,42,98,23,56,87,56},应为arrayB[]={23,13,42,98,23,56,87}。
回复
baifeng 2001-11-29
g z
回复
zx_sanjin 2001-11-29
哇塞~~什么跟什么啊~~简直一派胡言`~真是失败`~~~`~~这是相同啊~~~
回复
zx_sanjin 2001-11-29
N: 数组A中元素的个数
哇塞~~~简直驴唇不对马嘴~~什么跟什么啊~~~这成了相同的了`~~失败~~真是失败~~~~
回复
zx_sanjin 2001-11-29
N 数组个数
int k=0;

for(int i=0; i<N;)
{
for(int j=++i; j<N; j++)
{
if(arrayA[i] == arrayA[j])
{
arrayb[k] = arrayA[i];
k++;
}
}
}
没测试, 不行的话再联系~~
回复
ratrat 2001-11-29
能给个详细的步骤吗?
回复
nomy 2001-11-29
插入法排序
回复
发动态
发帖子
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
社区公告
暂无公告