C++编写程序将一有序数组多余的元素删除并输出

如题所述

#include <stdio.h>
#define ARR_SIZE 5
int Delete(int *a, int n, int x);

void main()
{
int a[ARR_SIZE-1], x, i, n;

printf("Please enter array numbers:\n");
scanf("%d", &n);

printf("Please enter array:\n");
for (i=0; i<n; i++)
{
scanf("%d", &a[i]);
}

printf("Please enter a number what you want to delet:\n");
scanf("%d", &x);

if( Delete(a, n, x) == -1 )
printf("can not find the number!\n") ;
else
{
printf("After delet %d:\n", x);
for(i=0; i < n - 1; i++)
{
printf("%d ", a[i]); // 不要加地址符,我还以为我编译器坏了,囧
}
}
}

int Delete(int *a, int n, int x)
{
int *p=NULL, *pos=NULL;

for (p=a; p<a+n; p++)
{
if (*p == x)
break;
}

if( p >= a + n )
return -1 ;

for( ; p < a + n - 1 ; ++p ) //循环反了,后边的数据会把前边的覆盖
{
*p=*(p+1);
}

return 0 ;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-12-05
#include <iostream>
using namespace std;
int unique(int *a, int n) {
if (n <= 0)
return 0;
int m = 1;
for (int i = 1; i < n; i ++) {
if (a[i] != a[m - 1]) {
a[m ++] = a[i];
}
}
return m;//返回修改后数组的长度
}
int main() {
int n = 11;
int a[] = {1, 1, 2, 3 ,3, 4, 4, 5, 5, 5, 5};
n = unique(a, n);
for (int i = 0; i < n; i ++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n = 11;
int a[] = {1, 1, 2, 3 ,3, 4, 4, 5, 5, 5, 5};
n = unique(a, a + n) - a;//使用STL自带去重函数,返回值为最后一个元素的位置(地址)
for (int i = 0; i < n; i ++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}本回答被网友采纳
第2个回答  2021-05-22

C++编写程序将一有序数组多余的元素删除并输出
return -1 ;for( ; p < a + n - 1 ; ++p ) \/\/循环反了,后边的数据会把前边的覆盖 { p=*(p+1);} return 0 ;}

(C++) 给出一个整数m,查找m是否存在数组a中,如果存在则删除,否则将m插 ...
else if (m == temp) \/\/ m等于输入的数字,需要删除,则不进行插入 { flag = 1;}

怎样C++实现线性表的建立、插入、删除、倒序?
void DeleteList(SeqList *L,int position); \/\/在顺序表L中删除位置为position的元素 void Sort1List(SeqList *L); \/\/对顺序表L进行直接插入排序 void Sort2List(SeqList *L); \/\/对顺序表L进行折半插入排序 int Locate1List(SeqList L,DataType newelem); \/\/对有序顺序表L进行折半查找,newelem数据元...

【算法-初级-数组】删除排序数组中的重复项(多语言版实现)
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用O(1) 额外空间的条件下完成。为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味...

怎样用C++输出数组元素的值?
按照题目的要求我们可以直接把数据存到数组之中,然后倒序输出数组元素即可,不需要对数据进行改变。正确代码如下:include <stdio.h> define N 2000 int main () { int i=0;int n=0,a[N];scanf("%d",&n);for(i;i<n;i++){ scanf("%d",&a[i]);} for(i=n-1;i>=0;i--){ pr...

C++ STL基本容器的输入输出与初始化接口(vector、deque、stack,map...
编程中的高效工具,C++ STL容器功能强大,让我们直接来看它们的核心接口:1. vector: 有序数组,支持快速随机访问,初始化和输出如下:\/\/ 初始化 std::vector vec = {1, 2, 3, 4, 5}; \/\/ 输出 for (const auto& num : vec) { std::cout << num << " "; } 2....

c语言程序设计:有一个已排好序的数组,要求输入一个数后,按原来排序的规...
本程序首先对数组a中的10个数从大到小排序并输出排序结果。然后输入要插入的整数n。再用一个for语句把n和数组元素逐个比较,如果发现有n>a[i]时,则由一个内循环把i以下各元素值顺次后移一个单元。后移应从后向前进行(从a[9]开始到a[i]为止)。 后移结束跳出外循环。插入点为i,把n赋予a[i...

算法03 二分查找算法【C++实现】
例如,假设我们有一个数组`4 6 9`,并需要查找数字9的位置,输出结果为`3`。如果查询数字为4或7,则分别输出`1`和`-1`,表示找到或未找到。二分查找的优势还体现在查找第一个大于特定数值的元素上。在这种情况下,查找过程同样遵循将数组分割并比较中间元素的原则,直至找到目标值或确定不存在满足...

求C++程序:任意从键盘输入10个整数,按从小到大的顺序排序,并输出结果...
通过使用某种排序算法,如冒泡排序、选择排序或插入排序,将输入的整数序列按升序排列。冒泡排序通过反复比较相邻元素交换位置,直到整个序列有序。选择排序则是每次找出剩余序列中最小(或最大)的元素,与当前位置进行交换。完成排序后,将排序后的数值及其序号组合在一起。最后,根据序号输出排序后的10个...

A U B - C (A并B减C)用C\/C++编写程序
int *array_a,*array_b,*array_c,*result;array_a=new int[Len_a];array_b=new int[Len_b];array_c=new int[Len_c];result=new int[Len_a+Len_b];memset(result,0,4*(Len_a+Len_b));{ int i;for(i=0;i<Len_a;i++)fscanf(r,"%d",&array_a[i]);for(i=0;i<Len_...

相似回答