Yahoo 知識+ 將於 2021 年 5 月 4 日 (美國東岸時間) 停止服務,而 Yahoo 知識+ 網站現已轉為僅限瀏覽模式。其他 Yahoo 資產或服務,或你的 Yahoo 帳戶將不會有任何變更。你可以在此服務中心網頁進一步了解 Yahoo 知識+ 停止服務的事宜,以及了解如何下載你的資料。
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
感謝兩位高手解答,把10分配給各個變數,確實是非常快,又很聰明的方法。不過,我還想知道,單純拆解數字,該怎麼做才會快? 我都是在陣列宣告,但我的方法很爛,超過10位數就要等了,希望p大能再幫忙一下,謝謝。
10 個解答
- prisoner26535Lv 77 年前最愛解答
#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 補充:
> 單純拆解數字,該怎麼做才會快?
寫不下了,再開一題吧! 要快?就是要避免 %
- weiLv 67 年前
你的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 補充:
我放棄.......