Ⅰ c语言。删去一维数组中所有相同的数,使之只剩一个。程序如下求改错。
他这个是有错误的,222最后会变成22,只有再把他那个fun里的实现方法在复制一遍才可以消除。因为你看a[]={2,2,2,3};的话,a[0]==a[1]判断,成立,a[0]=a[1]依次赋值过去。可是再往后i已经变成2,再往后是a[2]==a[3]的判断,也就是2==3,显然不成立,所以保留了两个相邻的2。即结果等于a[]={2,2,3}.
解决方法是再次的复制这个for语句下,就OK了。
#include
<stdio.h>
#define
N
80
int
fun(int
a[],
int
n)
{int
i,k,s;
s=n;
for(i=0;i<n;i++)
{
if(a[i]==a[i+1])
{
for(k=i;k<n;k++)
a[k]=a[k+1];
s--;
}
}
for(i=0;i<n;i++)
{
if(a[i]==a[i+1])
{
for(k=i;k<n;k++)
a[k]=a[k+1];
s--;
}
}
return
s;
}
void
main()
{
int
a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
printf("The
original
data
:\n");
for(i=0;
i<n;
i++)
printf("%3d",a[i]);
n=fun(a,n);
printf("\n\nThe
data
after
deleted
:\n");
for(i=0;i<20;i++)
printf("%3d",a[i]);
printf("\n%d\n",n);
}
Ⅱ C语言,删除数组中的重复数字然后输出
#include "stdio.h"
#include "string.h"
void main()
{
int i,k=1,j=10,a[10]={4,4,4,4,5,4,9,9,9,10};
for(k=i=1;i<10;i++)
{
for(j=0;j<k;j++)
{
if(a[j]==a[i]) break;
}
if(j==k) a[k++]=a[i];
}
printf(" ");
for(i=0;i<k;i++)
{
printf(" %d ",a[i]);
}
(2)c语言删除一维数组重复数扩展阅读:
printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。
其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。
比如:
int a=1234;
printf("a=%d ",a);
输出结果为a=1234。
scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include<stdio.h>。
int scanf(const char*restrict format,...);
函数scanf()是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
Ⅲ C语言。删去一维数组中所有相同的数,使之只剩一个。程序如下求改错。
for(i=0;i<n;i++) /*修改:此处改成i<n-1*/
{
if(a[i]==a[i+1]) /*错误:c从0~n-1取值,此处i+1已越界了*/
for(k=i;k<n;k++) /*修改:此处改成k<n-1*/
a[k]=a[k+1]; /*错误:c从0~n-1取值,此处k+1已越界了*/
由于a[k]=a[k+1]; 保证了最后一位已经移到前面,因此修改的地方,不会发生漏选错误。
Ⅳ c语言中一个一维数组怎样去重
可以定义两个数组,将原来数组的不重复的数放到新数组中就可以了.(如果需要也可以释放原来数组的内存)#include <stdio.h> main() { int a[5]={1,1,2,1,2}; int i,j,k=0, b[5]={0}; for(i=0;i<=4;i++) for(j=0;j<=4;j++) if(a[i]!=b[j]) {b[k]=a[i];k++;} printf("去重后的数组为:"); for(i=0;i<=k-1;i++) printf("a[i]=%d",a[i]); }
Ⅳ C语言中数组中删除相同的数
在第一个空中填i,第二个空中填a+j.
当找到相同的
元素
时,将位置记录到j的初始,并将后继元素依次前移覆盖相同的元素.
祝学业进步.
Ⅵ c语言:删去一维数组中所有相同的数, 使之只剩一个.求一完整正确程序
#include<stdio.h>
intfun(inta[],intn)
{
inti,j=0;
for(i=1;i<n;i++)
{
if(a[j]!=a[i])
a[++j]=a[i];
}
returnj;
}
voidmain()
{
inta[]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10};
intlen,i;
len=fun(a,sizeof(a)/sizeof(int));
for(i=0;i<=len;i++)
printf("%d",a[i]);
printf(" ");
}
Ⅶ C语言问题 把一个数组中的重复元素去掉
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
去掉字符串中重复的字符并排序
int main()
{
string input;
while (cin>>input)
{
int count = 0; // 统计有多少个空格
for (int i = 0; i < input.size(); i++)
{
for (int j = i+1; j < input.size(); j++)
{
if (input[i] == ' ')
break;
if (input[i] == input[j])
{
input[j] = ' ';
count++;
}
}
}
int newsize = input.size() - count;
string str(newsize,'0'); //创建一个长为newsize,用‘0’填充的字符串
int j = 0;
for (int i = 0; i < input.size(); i++)
{
if (input[i] != ' ')
{
str[j] = input[i];
j++;
}
}
sort(str.begin(), str.end());
cout << str<<endl;
}
}
(7)c语言删除一维数组重复数扩展阅读:
while语句若一直满足条件,则会不断的重复下去。但有时,需要停止循环,则可以用下面的三种方式:
一、在while语句中设定条件语句,条件不满足,则循环自动停止。
如:只输出3的倍数的循环;可以设置范围为:0到20。
二、在循环结构中加入流程控制语句,可以使用户退出循环。
1、break流程控制:强制中断该运行区内的语句,跳出该运行区,继续运行区域外的语句。
2、continue流程控制:也是中断循环内的运行操作,并且从头开始运行。
Ⅷ C语言删除一个整型数组里面重复的元素
利用双重循环,将每个值依次与其后面的值相比较,如果有相同的则删除该元素即可。
删除时,可以使用将后面元素依次向前移动一位,同时总长度减一的方式。
参考代码如下:
intremove_repeat(int*a,intl)
{
inti,j,k;
for(i=0;i<l;i++)
{
for(j=i+1;j<l;j++)//对后面每个元素比较,去重。
{
if(a[j]==a[i])//发现重复元素。
{
for(k=j+1;k<l;k++)//依次前移一位。
a[k-1]=a[k];
l--;//总长度减一。
}
}
}
returnl;//返回新的长度值。
}
Ⅸ c语言如何删除数组中重复元素
1
/*
2
思路:
3
将字符串存入字符数组a中,设将值拷贝给数组b,遍历b的每个元
4
素,与a中的每个元素比较,有相同则b中对应元素置为-1。
5
输出b中不为-1的元素。
6
*/
7
#include<stdio.h>
8
#include<string.h>
9
char
a[100],b[100];
10
void
Del(int
index,int
len){
11
for(int
i=0;i<len;i++){
12
if(index
==
i)
continue;//下标相同即同一个元素不比较,进入下一个循环
13
if(b[index]
==
a[i])
b[index]=-1;//有相同元素,置值为
-1
14
}
15
}
16
int
main(){
17
gets(a);
18
memcpy(b,a,sizeof(a));//将a的元素拷贝给b
19
int
len=strlen(a);//求a的长度
20
for(int
i=0;i<len;i++){
21
Del(i,len);
22
}
23
for(int
i=0;i<len;i++){//输出b中非-1的元素
24
if(b[i]!=-1){
25
printf("%c",b[i]);
26
}
27
}
28
return
0;
29
}
Ⅹ C语言中,如何用删除法删除数组中相同的数字
#include<stdio.h>
intdel_same(intdate[],intn);
intdel_same(intdate[],intn)
{
inti,j,k=0;
for(i=0;i<n;++i)//i用来遍历数组
{
for(j=i+1;j<n&&date[i]-date[j];++j);
if(!(j-n))//没有重复元素
date[k++]=date[i];//可将date[]看作两个数组
}
returnk;//返回删除后的有效长度
}
intmain(void)
{
intdate[1001],i,j,k,n;
printf("输入数据个数:");
scanf("%d",&n);
printf("输入数据:");
for(i=0;i<n;++i)
scanf("%d",date+i);
k=del_same(date,n);
for(i=0;i<k;++i)
printf("%-5d",date[i]);
return0;
}
(10)c语言删除一维数组重复数扩展阅读
C语言在数组中删去指定数字
#include<stdio.h>
#include<string.h>
intmain()
{
intn;
scanf("%d",&n);
intarray[10];
intarray_1[10];
intj=0;
for(inti=0;i<10;i++)
{
scanf("%d",&array[i]);
}
for(inti=0;i<10;i++)
{
if(array[i]!=n)
{
array_1[j]=array[i];
++j;//此时j++也是可以的;
}
}
for(inti=0;i<j;i++)
{
printf("%d",array_1[i]);
}
return0;
}