Yahoo 知識+ 將於 2021 年 5 月 4 日 (美國東岸時間) 停止服務,而 Yahoo 知識+ 網站現已轉為僅限瀏覽模式。其他 Yahoo 資產或服務,或你的 Yahoo 帳戶將不會有任何變更。你可以在此服務中心網頁進一步了解 Yahoo 知識+ 停止服務的事宜,以及了解如何下載你的資料。

?
Lv 5
? 發問於 電腦與網際網路程式設計 · 7 年前

C++ 最快速的解法

最近解資訊科的題目,會看到這種的:

各個數字的和為10者,在此題中我們戲稱為十全十美數。如37,其各個數字的和3+7=10,又如1036,其各個數字的和1+0+3+6=10,請列出所有4位數字中(0001~9999),所有的十全十美數並列出總個數。我是將input%10加到sum後,再input /= 10,一直做。

但請問有沒有人有更快、更簡明的方法?

更新:

我漏打了! 抱歉

我是說這種將數字分開成許多個位數的題目

像 9876 -> 9,8,7,6

更新 2:

感謝兩位高手解答,把10分配給各個變數,確實是非常快,又很聰明的方法。不過,我還想知道,單純拆解數字,該怎麼做才會快? 我都是在陣列宣告,但我的方法很爛,超過10位數就要等了,希望p大能再幫忙一下,謝謝。

10 個解答

評分
  • 7 年前
    最愛解答

    #include <iostream>

    using namespace std;

    int main(void) {

    int N,

    i[4];

    for(N=10, i[0]=N-1; i[0]>=0; --i[0])

    for(i[1]=N-i[0]; i[1]>=0; --i[1])

    for(i[2]=N-i[0]-i[1]; i[2]>=0; --i[2]){

    i[3]=N-i[0]-i[1]-i[2];

    if (0 <= i[3] && i[3] < N)

    cout << i[3]*1000+i[2]*100+i[1]*10+i[0] << endl;

    }

    return 0;

    }

    2014-04-28 22:28:37 補充:

    > 單純拆解數字,該怎麼做才會快?

    寫不下了,再開一題吧! 要快?就是要避免 %

  • 匿名
    7 年前

    參考下面的網址看看

    http://phi008780430.pixnet.net/blog

  • 匿名
    7 年前

    參考下面的網址看看

    http://phi008780430.pixnet.net/blog

  • 匿名
    7 年前

    參考下面的網址看看

    http://phi008780430.pixnet.net/blog

  • 匿名
    7 年前

    下面的網址應該對你有幫助

    http://phi008780430.pixnet.net/blog

  • 7 年前

    下面的網址應該對你有幫助

    http://phi008780430.pixnet.net/blog

  • 7 年前

    下面的網址應該對你有幫助

    http://phi008780426.pixnet.net/blog

  • ?
    Lv 5
    7 年前

    不過還是謝謝啦,wei大大的解法我是第一次看到(小弟學識淺薄),增長了知識。

  • 7 年前

    下面的網址應該對你有幫助

    http://phi008780426.pixnet.net/blog

  • wei
    Lv 6
    7 年前

    你的input代表甚麼?

    這樣呢

    int main()

    {

    int e=0; //總個數

    for(int a=0;a<10;a++)

    for(int b=0;b<=9-a;b++)

    for(int c=0;c<=9-a-b;c++)

    if(a+b+c>0)

    {

    printf("%d%d%d%d\n",a,b,c,10-a-b-c);

    e++;

    }

    printf("%d",e);

    return 0;

    }

    2014-04-27 21:52:28 補充:

    我的 Tab 跟 反斜線n 被吃掉了...

    2014-04-27 22:46:24 補充:

    我放棄.......

還有問題嗎?立即提問即可得到解答。