第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在不使用數(shù)組的情況下對(duì)數(shù)字進(jìn)行排序?

如何在不使用數(shù)組的情況下對(duì)數(shù)字進(jìn)行排序?

胡子哥哥 2022-09-21 21:37:25
我如何找到可以使用給定數(shù)字的數(shù)字(例如)形成的最大值和最小數(shù),而根本不使用任何數(shù)組?485735我正在研究氣泡排序算法(使用數(shù)組),我試圖弄清楚如何在沒(méi)有數(shù)組的情況下編寫(xiě)算法,但我的問(wèn)題是計(jì)算每個(gè)數(shù)字的索引我唯一想到的是一個(gè)算法來(lái)計(jì)算輸入中的位數(shù)(朋友幫我解決了這個(gè)問(wèn)題),但到目前為止,我試圖弄清楚這件事4天,這是一個(gè)與我的家庭作業(yè)成績(jī)有關(guān)的問(wèn)題。規(guī)則是最小的數(shù)字不能以零開(kāi)頭,例如:Input: 3134059 The largest number is: 9543310The smallest number is: 1033459
查看完整描述

2 回答

?
楊__羊羊

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊

參考資料:請(qǐng)參閱以下邏輯演示。


假裝數(shù)字是一個(gè)數(shù)字?jǐn)?shù)組,例如命名,并假裝索引是最右邊的數(shù)字。d[]0


氣泡排序會(huì)將更高的值移動(dòng)到更高的索引,因此,如果我們保持該邏輯,則排序?qū)a(chǎn)生所需的 ,例如 成為。dlargestNumber13579249754321


假設(shè)你有一個(gè)計(jì)算10n的方法,然后你可以在任何索引處得到數(shù)字:pow10(n)


d[i] = number / pow10(i) % 10

例:


         6 4 2 0  index

         ↓ ↓ ↓ ↓

number = 1357924


d[4] = 1357924 / pow10(4) % 10

     = 1357924 / 10000 % 10

     = 135 % 10

     =   5

在氣泡排序中,如果索引較低的元素較大,則可以交換相鄰的元素,因此首先需要兩個(gè)值。假設(shè)我們這樣做是為了:i = 3


         6 4 2 0  index

         ↓ ↓ ↓ ↓

number = 1357924

i = 3


a = d[i] = d[3] = 7

b = d[i+1] = d[4] = 5

因?yàn)槲覀冃枰粨Q值。我們可以按如下方式執(zhí)行此操作:a > b


 1357924

-   7000   Clear digit at i=3

-  50000   Clear digit at i=4

=1300924   Value with digits cleared

+  70000   Set digit at i=4

+   5000   Set digit at i=3

=1375924   Value with digits at index 3 and 4 swapped

公式為:


number = number - a * pow10(i) - b * pow10(i+1)

                + a * pow10(i+1) + b * pow10(i)

可以重構(gòu)為:


number += ((a - b) * 10 - (a - b)) * pow10(i)

現(xiàn)在您已經(jīng)知道如何獲取“數(shù)組元素值”(又名 ),以及如何使用上述公式“交換數(shù)組元素”,然后將其寫(xiě)入正常的氣泡排序算法中,以便您可以:d[i]


largestNumber = sortDigits(number)

現(xiàn)在,您已經(jīng)計(jì)算出最大值。要計(jì)算最小值,您只需反轉(zhuǎn)數(shù)字,但在執(zhí)行此操作之前,您需要確保:d[0] != 0


n = largestNumber, i = 0

while (n % 10 == 0) { // locate least non-zero digit

    n /= 10

    i++

}

if (i != 0) {

    // clear least digit and add at index 0

    n = n / 10 * pow10(i + 1) + n % 10

}

例:


n = 97500

After loop: n = 975, i = 2

n / 10 = 97

            * pow10(i + 1) = 97000

                                   + n % 10 = 97005

現(xiàn)在,您可以計(jì)算所需的其他值:


smallestNumber = reverse(n)

例如,請(qǐng)參閱Java在不使用數(shù)組的情況下反轉(zhuǎn)int值,了解如何執(zhí)行此操作。


查看完整回答
反對(duì) 回復(fù) 2022-09-21
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

public static void main(String[] args) {


    StringBuilder s = new StringBuilder("4857035");

    char aux;


    for (int i = 0; i < s.length() - 1; i++) {

        for (int j = i + 1; j < s.length(); j++) {

            if (s.charAt(i) > (s.charAt(j))) {

                aux = s.charAt(i);

                s.setCharAt(i, s.charAt(j));

                s.setCharAt(j, aux);

            }

        }

    }

    //output 0345578


    while (s.charAt(0) == '0') {

        for (int i = 1; i < s.length(); i++) {

            if (s.charAt(i) != '0') {

                aux = s.charAt(0);

                s.setCharAt(0, s.charAt(i));

                s.setCharAt(i, aux);

                break;

            }

        }

    }

    //output 3045578

}

這是針對(duì)最小的數(shù)字,對(duì)于最大的數(shù)字,請(qǐng)更改 if 語(yǔ)句 ( ) 上的符號(hào)并刪除 while 語(yǔ)句。if (s.charAt(i) < (s.charAt(j))


查看完整回答
反對(duì) 回復(fù) 2022-09-21
  • 2 回答
  • 0 關(guān)注
  • 149 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)