當前位置:首頁 » 編程語言 » c語言刪除一維數組重復數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言刪除一維數組重復數

發布時間: 2022-12-21 08:19:19

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("&lt;格式化字元串&gt;",&lt;參量表&gt;)。

其中格式化字元串包括兩部分內容:一部分是正常字元,這些字元將按原樣輸出;另一部分是格式化規定字元,以"%"開始,後跟一個或幾個規定字元,用來確定輸出內容格式。

參量表是需要輸出的一系列參數,其個數必須與格式化字元串所說明的輸出參數個數一樣多,各參數之間用","分開,且順序一一對應,否則將會出現意想不到的錯誤。

比如:

int a=1234;

printf("a=%d ",a);

輸出結果為a=1234。

scanf()是C語言中的一個輸入函數。與printf函數一樣,都被聲明在頭文件stdio.h里,因此在使用scanf函數時要加上#include&lt;stdio.h&gt;。

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;

}