時間限制: 1sec 記憶體限制: 128mb乙個數與另乙個數如果含有相同數字和個數的字元,則稱兩數相關。現有一堆亂七八糟的整數,裡面可能充滿了彼此相關的數,請你用一下手段,自動地將其剔除。
輸入
每組資料前有乙個n(<1000),表示跟隨的整數p(0
輸出
按從小到大的順序輸出非相關數,若沒有非相關數,則輸出none
樣例輸入
8213 667 3 213 43 34 677 2
3322 232 232
0樣例輸出
2 3 667 677
none
方法一比較煩人,方法二比較考驗基礎知識
有些亂,但是還可以,思路看注釋
發現我的程式極其簡單
原理就是將讀取的數全部轉化,然後將轉化後的陣列進行去重處理#include
#include
//這個標頭檔案是用來存放初始化函式memest的
#include
//這個標頭檔案是存放快速排序函式qsort的
//建立兩個陣列,乙個是存放讀取的數的資訊,另乙個是存放第i個數是否出現重複數的資訊
//對於陣列da,0~9存放的是數字出現的次數,10存放的是這個數的位數,11存放的是這個數
int da[
1000][
12]=,vi[
1000];
//進行快速排序的對比函式,遞增的
intcompare
(const
void
* a,
const
void
* b)
//當前數和前幾個數進行對比,看是否出現重複數,沒出現返回0
intmatch
(int n)}}
return0;
//到這裡就意味著並沒有出現相同的數
}int
main()
if(i>1)
}}int num[n]
;//建立乙個陣列用來存放沒有重複數的數
for(i=
1,j=
0;i<=n;i++
)//j用來記錄沒有重複數的個數
if(vi[i]==0
)if(j==0)
printf
("none");
else
printf
("\n");
}}
轉化形式:如12306 ----> 63210
關鍵的地方是使用兩個陣列,乙個存放原數,另乙個存放轉化後的數
對轉化後的陣列進行查重,如果出現重複數,原數陣列進行賦值為-1(畢竟都是》0的,排序和輸出都很容易判別)
問題1:為什麼要設定兩個一維陣列,而不是設定乙個二維陣列
因為在進行快速排序的時候不可以使用二維陣列。
#include
#include
#include
int da[
1000]=
,vi[
1000]=
,num[30]
;int
comparedown
(const
void
* a,
const
void
* b)
intcompareup
(const
void
* a,
const
void
* b)
//將數字n轉換,如1233轉化為3321
void
convert
(int
*n)//進行降序排列
qsort
(num,i,
sizeof
(int
),comparedown)
;//這裡的對比函式不是引用,而是使用位址
//將排列後的數轉化為乙個數
for(t=0,
*n=0
;t)*n+
=*n*
10+num[t]
;return;}
intmain()
for(i=
0;i)//順序進行查詢是否出現重複的情況,如果出現將存放原數的陣列元素賦值為-1
//這樣做的原因是因為轉化後的陣列和原數陣列之間除了下標之間的聯絡之外並沒有任何的聯絡
for(i=
0;i1;i++)}
qsort
(vi,n,
sizeof
(int
),compareup)
;//公升序排列
for(i=
0,j=
0;iif(
!j)printf
("none");
printf
("\n");
}return0;
}
1204 剔除相關數
題目描述 乙個數與另乙個數如果含有相同數字和個數的字元,則稱兩數相關。現有一堆亂七八糟的整數,裡面可能充滿了彼此相關的數,請你用一下手段,自動地將其剔除。輸入 多例項測試。每組資料報含乙個n n 1000 和n個int範圍內的正整數。若n為0,表示結束。輸出 按從小到大的順序輸出非相關數,若沒有非相...
1204 剔除相關數
time limit 1 sec memory limit 128 mb submit 163 solved 80 submit status web board 乙個數與另乙個數如果含有相同數字和個數的字元,則稱兩數相關。現有一堆亂七八糟的整數,裡面可能充滿了彼此相關的數,請你用一下手段,自動地將...
zzuli oj 1204 剔除相關數
time limit 1 sec memory limit 128 mb submit 126 solved 61 submit status web board 乙個數與另乙個數如果含有相同數字和個數的字元,則稱兩數相關。現有一堆亂七八糟的整數,裡面可能充滿了彼此相關的數,請你用一下手段,自動地將...