C语言 删除数组中相同元素 参照大佬的代码的新思路 写了一下又有问题 求教
给你个思路
简单来说就是要确定循环的次数,每次递增是按1 2 4 8 也就是通过循环的次数来控制
2的几次幂
循环次数的确定。
就是 次数=时间/5s,如果时间是分钟或者小时需要转换成秒数
例如4/5结果为0此时只有一个细菌,2的0次幂就是1
循环的条件int,<=次数
for(int i=0;i<=次数;i++)
循环里将1 2 4 8...等结果相加,总和就是细菌总数
#include#define N 10void main() { int a[N],i,m,n; float av; for ( i=0;ia[i] ) n=a[i]; av+=a[i]; } av/=N; printf("最大值%d,最小值%d,平均值%f
",m,n,av);}如果需要排序#include#define N 10void main() { int a[N],i,j,m,n; float av; for ( i=0;i<N;i++ ) scanf("%d",&a[i]); av=0; for ( i=0;i<N;i++ ) av+=a[i]; for ( i=0;i<N-1;i++ ) //降序排序 for ( j=i+1;j<N;j++ ) if ( a[i]<a[j] ) { m=a[i];a[i]=a[j];a[j]=m; } m=a[0]; n=a[N-1]; av/=N; printf("最大值%d,最小值%d,平均值%f
",m,n,av);}
完全参照你的思路改的。
只用一个数组,找相同,删其中一个,数组需要移位。
#include <stdio.h>
#define N 10
int main()
{
int a[N];
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
printf("源:
");
for(int i=0;i<N;i++)
printf("%d ",a[i]);
//------------------修改部分,其他与你源码一致-------------------------------
int find,i,j,k,n=N;
while(1)//循环检查,直到没有相同数值元素
{
find=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]==a[j])//找到两个相同的,删除后一个a[j],数组移位,最大长度n值改变,并跳回最外层循环,开始新一轮检测
{
for(k=j;k<n-1;k++)//删除并移位
a[k]=a[k+1];
n--;//长度减一
find=1;
break;
}
}
if(find==1)
break;
}
if(find==0)
break;
}
printf("
处理后:
");
for(i=0;i<n;i++)
printf("%d ",a[i]);
//-------------------------------------------------------------------------------
return 0;
}
#include <stdio.h>
#define N 10
int main()
{
int a[N];
for(int i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
printf("数组数据:
");
for(int i=0;i<N;i++)
{
printf("%d ",a[i]);
}
int find,n = 0;
for(int i=0;i<N;i++)
{
find=0;
for(int j=i + 1;j<N;j++)
{
if(a[i]==a[j])
{
find=1; break;
}
}
if(find==0)
{
a[n++]=a[i];
}
}
printf("
去重结果:
");
for(int i=0;i < n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
思路是对的,只是你的代码写的有问题,首先你要明白去重后数组的长度,是n不是N,然后你在循环内部和外部都定义了n也会导致程序有问题,以上
代码仅供参考
两遍搜索会搜到同一个元素,加一个判断i不等于j,还有就是把去重后的用新的数组吧。
阙绿欧乃: 利用双重循环,将每个值依次与其后面的值相比较,如果有相同的则删除该元素即可. 删除时,可以使用将后面元素依次向前移动一位,同时总长度减一的方式. 参考代码如下: int remove_repeat(int *a, int l) {int i, j, k; for(i = 0; i < l; i ++){for...
华亭县13922689187: c语言 去掉数组中重复的元素····求帮助 - ?
阙绿欧乃: 说的不是很清楚,数组定义的时候就删除?看来你对数组的操作还不是很清楚,应该是在数据写入数组的时候将其删除吧.你可以这样,如果数组不大,在写入数据的时候先遍历一遍数组看看数组中是否有该数据,如果有那么就不把数据写入数组,如果没有就接着最后一个元素写入数组就可以了.
华亭县13922689187: C语言删除一个整型数组里面重复的元素?
阙绿欧乃: for(int i=0; i<length;i++){ for(int j=0; j<i;j++){ if(arr[j]=arr[i]){ for(int k=i+1;k<length;k++){ arr[k-1]=arr[k]; } length--; break; } } }
华亭县13922689187: C语言数组去除重复内容 - ?
阙绿欧乃: 用两个游标控制,可以方便的实现,参考代码如下: #include<stdio.h> #define SIZE 12 int a[SIZE]={0,0,0,1,2,2,3,4,4,5,5,44}; int main() {int i=1,j=0;while(i<SIZE)if(a[j]!=a[i]){++j;a[j]=a[i];++i;} else ++i;for(i=0;i<=j;++i){printf("%d",a[i]);if(i<j)printf(",");}return 0; }
华亭县13922689187: C语言数组内任意几个连续相同的元素怎么删? - ?
阙绿欧乃: //#include "stdafx.h"//vc++6.0加上百这度一专行属.#include "stdio.h" void main(void){ int i,j,k,a[]={4,78,3,2,19,0,56,56,8,7,3,1,90,86,437,918,0,1},ln; for(ln=sizeof(a)/sizeof(int),k=i=1;i<ln;i++){ for(j=0;j<k;j++) if(a[j]==a[i]) break; if(j>=k) a[k++]=a[i]; } for(i=0;i<k;printf("%d ",a[i++]));//Look at... printf("\n"); }
华亭县13922689187: c语言中怎样将数组中的所有相同的数都删除 - ?
阙绿欧乃: 可以先排个序,然后相邻元素比较,相同的就通过后边的向前移动来去掉, 最后参用链数的数组这个插入删除方便且时间少.
华亭县13922689187: C语言 删除输入的数组中的重复元素(最多20个元素) 要求编写函数,且头文件只有stdio.h - ?
阙绿欧乃: #include <stdio.h>// *n是数组元素个数 void Delete_Same(int a[], int *n) { int i, j; int tag[20] = {0}; //tag[i]标记a[i]是否使用过 for(i = 0; i < *n; ++i) { if( tag[i] )continue; else{ for(j = i+1; j < *n; ++j) if( a[i] == a[j] ) tag[j] = 1; }} // 最后元素移动在数组前面...
华亭县13922689187: c语言课程设计 :删除序列中相同的数 要求数据已经按照由小到大的顺序排好 存储在数组中,完成删除 - ?
阙绿欧乃: #include<iostream> using namespace std; void main() { int count =10; int a[10] = {1,1,1,1,3,3,3,5,5,6}; //从小到大排序的一个数列 for(int i =0;i<count -1;) { if(a[i] == a[i+1]) { for(int j =i+1;j<count -1;j++) a[j] = a[j+1]; //两个数相同,则把后一个数删除...
华亭县13922689187: C语言中怎么删除数组中相同的数字 - ?
阙绿欧乃: #include #include int simplification(int a[], int n) { int i,j,k; for(i = 0; i < n - 1; ++i) { for(j = i + 1; j < n; ++j) { if(a[i] == a[j]) { for(k = j; k < n - 1; ++k) a[k] = a[k + 1]; --j; --n; } } } return n;} int main() { int a[30],i,n = 30; printf("原数组:\n"); srand((unsigned)...
华亭县13922689187: 请问如何用C语言编程删除一维数组中的多与元素,即值相同的元素只保留一个? 求解答?
阙绿欧乃: 新声明一个数组,用嵌套循环,外层循环遍历一维数组,里层循环遍历新数组判断新数组中是否有当前元素,只要不同就存在新数组中. 鄙视那些只给代码,不说原理的人.