c語言程式題,比如輸入乙個數3256,將他從小到大輸出,就是2356。怎麼寫。

時間 2021-05-14 08:38:18

1樓:Guoy

把數字以字元的形式讀入,記錄每一位出現的次數,再依次輸出即可。

需要去重,將出現次數置1即可。

#include

int isDigit(char c)

void print(int count, int digit)int main() ;

while (1)

//從小到大依次輸出每一位出現的次數

for (int i = 0; i < 10; i++)print(out[i], i);

return 0;}

2樓:Miss包紙

存乙個10位的array然後數每個數字有幾個比如3256就是:

0:0,1:0,2:1,3:1,4:0,5:1,6:1…然後根據這個array列印,就是

0:不列印,1:不列印,2:列印1次…

3樓:cver

建立乙個陣列用於接收輸入數值0-9的個數hist[10] = ,再按序輸出.

scanf -> val

hist[val]++

foreach hist[i]

if hist[i]> 0 : printf i, hist[i]--

4樓:嵌入式Linux

後面有提到的桶排序,我覺得可能他說錯了。

使用計數排序應該非常不錯,因為一共也就 10個數字。並不消耗什麼記憶體。

#include

#include

/*二進位制 |十進位制 |十六進製制 | 字元0011 0000 48 30 0

0011 0001 49 31 1

0011 0010 50 32 2

0011 0011 51 33 3

0011 0100 52 34 4

0011 0101 53 35 5

0011 0110 54 36 6

0011 0111 55 37 7

0011 1000 56 38 8

0011 1001 57 39 9

*/void

jishu

(char

*nums

,unsigned

char

*output

,size_t

len);

intmain

(int

argc

,char

const

*argv);

/*0~9*/

inti=0

;gets

(nums

);jishu

(nums

,output

,strlen

(nums

));//printf("\n");

for(i=

0;i<10;

i++)getchar

();return0;

}void

jishu

(char

*nums

,unsigned

char

*output

,size_t

len)}輸出

5樓:快叫我吃飯

#include

#include

int main(int argc, char* argv)unsigned char chrs[255];

char *pBuffer = (char*)malloc(4096);

//按順序儲存所有ascii字元,0也存,無所謂了for (size_t i = 0; i < 255; i++)chrs[i] = (unsigned char)i;

printf("輸入:\n");

scanf("%s", pBuffer);

getchar();//獲取輸入快取的回車鍵//獲取輸入字串長度

size_t len = strlen(pBuffer);

printf("\n排序後:\n");

for (size_t i=0; i<255; i++)for (size_t n = 0; n < len; n++)if (pBuffer[n] == chrs[i])printf("%c", pBuffer[n]);

free(pBuffer);

getchar();

6樓:醉生夢死

因為乙個數里只會出現0-9這幾個數字所以直接開乙個大小為10的陣列用來儲存,陣列元素大小為每個數出現的次數

將這個數字按字串讀取,然後遍歷一遍這個字串遇到 /0 就停下,每遇到乙個字元字元數量+1

a[str[i]-『0』]+=1;

最後再兩重for迴圈每個陣列下標輸出相應的次數就可以了陣列元素大小為0的不輸出

時間複雜度O(n) 空間O(1)

手機打字寫的比較隨意

7樓:慕城

把輸入的數,列印到字元陣列,然後再用for迴圈進行排序,最後輸出字元陣列就可以了。

#include

#define N 10

int x, i, tap;

char a[N], t ;

void pai_xu(char a)

}main()

printf("請輸入乙個整數");

scanf("%d",&x);

fprintf(a,"%d",x)

pai_xu(a);

printf("%s",a);

//大概就是這麼個思路

8樓:碧海風

C語言都快忘光了……湊合寫寫吧~

分兩步。第一步,輸入之數反覆除以10取餘,以獲取各位值;第二步,對各位值排序後輸出。

#include

#include

#define ARR_LEN 255

/*陣列長度上限*/

/* 數字按位剝離 */

intnumToDigit

(int

num,

intarr

)while(--

i)/*逆序儲存*/

arr[j++

]=temp[i

];return

count;}

/* 氣泡排序 */

void

bubbleSort

(int

arr,

intlen)}

}/*列印陣列*/

void

printArray

(int

arr,

intlen

)int

main

(void

)執行結果

9樓:

先說下思想吧,因為要取得輸入數的每一位來比較,使用模運算費時費力,還不如用乙個字元陣列來存這個數。然後對這個陣列排序再輸出就可以了。這裡因為不知道你的數要求要多大的,所以陣列長度設為100,排序用的是最基礎的氣泡排序

#include

#include

#define MAX 100

void

sort

(char*,

size_t

);int

main

(int

argc

,char

const

*argv

)void

sort

(char

*nums

,size_t

len)}}

return;}

如何用c語言判斷乙個數為小數?

魔某人 include include const char result 2 int main intNumType char Str bool dot false 小數點 char p Str charCh p if Ch Ch for Ch p p dot true elseif 9 Ch 0...

python怎麼輸入乙個數然後把它的每個數倒過來輸出

寫乙個不用轉換成str的版本 from math import log10 ceil defreturn inverse num list x return x 10 i 10fori inrange 0 ceil log10 x 只要直接呼叫即可In 1 return inverse num li...

c語言為什麼輸入 乙個實數123 123輸出的結果會變?

林凱 簡單點說,十進位制數如何表示1 3呢,0.333333 再乘以幾個10也抹不掉小數點!二進位制數如何表示0.3呢?再乘以幾個2也抹不掉小數點!3.14159269不能用八位十進位制 表示 123.123同樣不能用二十三位的float表示 打比方和原理的分割線 浮點數由1位符號位 若干位指數字 ...