#include<stdio.h>
void test(int a[])
{ int x,y,z;
x=a[0]+a[1]*10+a[2]*100+a[3]*1000; y=a[1]+a[4]*10+a[5]*100+a[6]*1000; z=a[7]+a[1]*10+a[2]*100+a[5]*1000+a[6]*10000; if(x+y==z&&a[3]!=0&&a[6]!=0)
{ printf("%d%d%d%d",a[6],a[5],a[4],a[1]); }
}
void dfs(int a[],int k)
{ int i,t;
if(k>=10)
{ test(a); return; }
for(i=k;i<10;i++)
{
t=a[i]; a[i]=a[k]; a[k]=t; dfs(a,k+1); t=a[i]; a[i]=a[k]; a[k]=t;
}
}
int main()
{ int a[]={0,1,2,3,4,5,6,7,8,9}; dfs(a,0); return 0; }
uj5u.com熱心網友回復:
“給定一個小點的輸入,完整單步跟蹤(同時按Alt+7鍵查看Call Stack里面從上到下列出的對應從里層到外層的函式呼叫歷史)一遍。”是理解遞回函式作業原理的不二法門!遞回函式關注以下幾個因素
·退出條件
·引數有哪些
·回傳值是什么
·區域變數有哪些
·全域變數有哪些
·何時輸出
·會不會導致堆疊溢位
uj5u.com熱心網友回復:
#include <stdio.h>
int count;
int OKcount;
void test(int a[])
{
int x,y,z;
int i;
if (count%36288==0) {
for (i=0;i<10;i++) printf("%d ",a[i]);
printf("\n");
}
count++;
x=a[0]+a[1]*10+a[2]*100+a[3]*1000;
y=a[1]+a[4]*10+a[5]*100+a[6]*1000;
z=a[7]+a[1]*10+a[2]*100+a[5]*1000+a[6]*10000;
if (x+y==z && a[3]!=0 && a[6]!=0) {
printf("OK %d:%d%d%d%d\n",OKcount,a[6],a[5],a[4],a[1]);
OKcount++;
}
}
void dfs(int a[],int k)
{
int i,t;
if (k>=10) {
test(a);
return;
}
for (i=k;i<10;i++) {
t=a[i]; a[i]=a[k]; a[k]=t;
dfs(a,k+1);
t=a[i]; a[i]=a[k]; a[k]=t;
}
}
int main()
{
int a[]={0,1,2,3,4,5,6,7,8,9};
count=0;
OKcount=0;
dfs(a,0);
printf("total count:%d\n",count);
printf("OKcount:%d\n",OKcount);
return 0;
}
//0 1 2 3 4 5 6 7 8 9
//0 1 9 4 6 7 3 5 8 2
//0 2 8 5 1 9 6 7 4 3
//0 3 7 2 5 6 4 1 8 9
//0 4 6 8 7 3 2 1 5 9
//0 5 6 3 4 1 2 7 8 9
//0 6 5 4 1 7 3 2 8 9
//0 7 4 5 8 9 6 1 2 3
//0 8 3 7 5 6 4 2 1 9
//0 9 2 8 7 3 6 4 5 1
//1 0 2 3 4 5 6 7 8 9
//1 0 9 4 6 7 3 5 8 2
//1 2 8 5 0 9 6 7 4 3
//1 3 7 2 5 6 4 0 8 9
//1 4 6 8 7 3 2 0 5 9
//1 5 6 3 4 0 2 7 8 9
//1 6 5 4 0 7 3 2 8 9
//1 7 4 5 8 9 6 0 2 3
//1 8 3 7 5 6 4 2 0 9
//1 9 2 8 7 3 6 4 5 0
//2 1 0 3 4 5 6 7 8 9
//2 1 9 4 6 7 3 5 8 0
//2 0 8 5 1 9 6 7 4 3
//2 3 7 0 5 6 4 1 8 9
//2 4 6 8 7 3 0 1 5 9
//2 5 6 3 4 1 0 7 8 9
//2 6 5 4 1 7 3 0 8 9
//2 7 4 5 8 9 6 1 0 3
//2 8 3 7 5 6 4 0 1 9
//2 9 0 8 7 3 6 4 5 1
//3 1 2 0 4 5 6 7 8 9
//3 1 9 4 6 7 0 5 8 2
//3 2 8 5 1 9 6 7 4 0
//3 0 7 2 5 6 4 1 8 9
//3 4 6 8 7 0 2 1 5 9
//3 5 6 0 4 1 2 7 8 9
//3 6 5 4 1 7 0 2 8 9
//3 7 4 5 8 9 6 1 2 0
//3 8 0 7 5 6 4 2 1 9
//3 9 2 8 7 0 6 4 5 1
//4 1 2 3 0 5 6 7 8 9
//4 1 9 0 6 7 3 5 8 2
//4 2 8 5 1 9 6 7 0 3
//4 3 7 2 5 6 0 1 8 9
//4 0 6 8 7 3 2 1 5 9
//4 5 6 3 0 1 2 7 8 9
//4 6 5 0 1 7 3 2 8 9
//4 7 0 5 8 9 6 1 2 3
//4 8 3 7 5 6 0 2 1 9
//4 9 2 8 7 3 6 0 5 1
//5 1 2 3 4 0 6 7 8 9
//5 1 9 4 6 7 3 0 8 2
//5 2 8 0 1 9 6 7 4 3
//5 3 7 2 0 6 4 1 8 9
//5 4 6 8 7 3 2 1 0 9
//5 0 6 3 4 1 2 7 8 9
//5 6 0 4 1 7 3 2 8 9
//5 7 4 0 8 9 6 1 2 3
//5 8 3 7 0 6 4 2 1 9
//5 9 2 8 7 3 6 4 0 1
//6 1 2 3 4 5 0 7 8 9
//6 1 9 4 0 7 3 5 8 2
//6 2 8 5 1 9 0 7 4 3
//6 3 7 2 5 0 4 1 8 9
//6 4 0 8 7 3 2 1 5 9
//6 5 0 3 4 1 2 7 8 9
//6 0 5 4 1 7 3 2 8 9
//6 7 4 5 8 9 0 1 2 3
//6 8 3 7 5 0 4 2 1 9
//6 9 2 8 7 3 0 4 5 1
//7 1 2 3 4 5 6 0 8 9
//7 1 9 4 6 0 3 5 8 2
//7 2 8 5 1 9 6 0 4 3
//7 3 0 2 5 6 4 1 8 9
//7 4 6 8 0 3 2 1 5 9
//7 5 6 3 4 1 2 0 8 9
//7 6 5 4 1 0 3 2 8 9
//7 0 4 5 8 9 6 1 2 3
//7 8 3 0 5 6 4 2 1 9
//7 9 2 8 0 3 6 4 5 1
//8 1 2 3 4 5 6 7 0 9
//8 1 9 4 6 7 3 5 0 2
//8 2 0 5 1 9 6 7 4 3
//8 3 7 2 5 6 4 1 0 9
//8 4 6 0 7 3 2 1 5 9
//8 5 6 3 4 1 2 7 0 9
//8 6 5 4 1 7 3 2 0 9
//8 7 4 5 0 9 6 1 2 3
//8 0 3 7 5 6 4 2 1 9
//8 9 2 0 7 3 6 4 5 1
//9 1 2 3 4 5 6 7 8 0
//9 1 0 4 6 7 3 5 8 2
//9 2 8 5 1 0 6 7 4 3
//9 3 7 2 5 6 4 1 8 0
//9 4 6 8 7 3 2 1 5 0
//9 5 6 3 4 1 2 7 8 0
//9 6 5 4 1 7 3 2 8 0
//9 7 4 5 8 0 6 1 2 3
//9 8 3 7 5 6 4 2 1 0
//9 0 2 8 7 3 6 4 5 1
//total count:3628800
//OKcount:0
//
uj5u.com熱心網友回復:
三羊獻瑞問題是什么問題連個鏈接都沒有
回答你的問題 還得我自己去搜問題嗎?
uj5u.com熱心網友回復:
我用#CSDN#這個app發現了有技術含量的博客,小伙伴們求同去《三羊獻瑞的練習》, 一起來圍觀吧 https://blog.csdn.net/Derrick_itRose/article/details/114259027?utm_source=app&app_version=4.5.2
uj5u.com熱心網友回復:
謝謝,我覺得用全排列應該是可以得出解的,但我改了一下沒有解,不懂問題在哪uj5u.com熱心網友回復:
// 3 2 1 0
// 祥 瑞 生 輝
// 6 5 4 2
// + 三 羊 獻 瑞
//-------------------
// 6 5 1 2 7
// 三 羊 生 瑞 氣
#include <stdio.h>
int count;
int OKcount;
void test(int a[])
{
int x,y,z;
int i;
if (count%36288==0) {
printf("%07d:",count);
for (i=0;i<10;i++) printf("%d ",a[i]);
printf("\n");
}
count++;
x=a[0]+a[1]*10+a[2]*100+a[3]*1000;
y=a[2]+a[4]*10+a[5]*100+a[6]*1000;
z=a[7]+a[2]*10+a[1]*100+a[5]*1000+a[6]*10000;
if (x+y==z && a[3]!=0 && a[6]!=0) {
printf("OK %d:\n",OKcount);
printf("%07d:",count-1);
for (i=0;i<10;i++) printf("%d ",a[i]);
printf("\n");
printf(" %d%d%d%d\n",a[3],a[2],a[1],a[0]);
printf("+%d%d%d%d\n",a[6],a[5],a[4],a[2]);
printf("---------\n");
printf("%d%d%d%d%d\n",a[6],a[5],a[1],a[2],a[7]);
OKcount++;
}
}
void dfs(int a[],int k)
{
int i,t;
if (k>=10) {
test(a);
return;
}
for (i=k;i<10;i++) {
t=a[i]; a[i]=a[k]; a[k]=t;
dfs(a,k+1);
t=a[i]; a[i]=a[k]; a[k]=t;
}
}
int main()
{
int a[]={0,1,2,3,4,5,6,7,8,9};
count=0;
OKcount=0;
dfs(a,0);
printf("total count:%d\n",count);
printf("OKcount:%d\n",OKcount);
return 0;
}
//0000000:0 1 2 3 4 5 6 7 8 9
//0036288:0 1 9 4 6 7 3 5 8 2
//0072576:0 2 8 5 1 9 6 7 4 3
//0108864:0 3 7 2 5 6 4 1 8 9
//0145152:0 4 6 8 7 3 2 1 5 9
//0181440:0 5 6 3 4 1 2 7 8 9
//0217728:0 6 5 4 1 7 3 2 8 9
//0254016:0 7 4 5 8 9 6 1 2 3
//0290304:0 8 3 7 5 6 4 2 1 9
//0326592:0 9 2 8 7 3 6 4 5 1
//0362880:1 0 2 3 4 5 6 7 8 9
//0399168:1 0 9 4 6 7 3 5 8 2
//0435456:1 2 8 5 0 9 6 7 4 3
//0471744:1 3 7 2 5 6 4 0 8 9
//0508032:1 4 6 8 7 3 2 0 5 9
//0544320:1 5 6 3 4 0 2 7 8 9
//0580608:1 6 5 4 0 7 3 2 8 9
//0616896:1 7 4 5 8 9 6 0 2 3
//0653184:1 8 3 7 5 6 4 2 0 9
//0689472:1 9 2 8 7 3 6 4 5 0
//0725760:2 1 0 3 4 5 6 7 8 9
//0762048:2 1 9 4 6 7 3 5 8 0
//0798336:2 0 8 5 1 9 6 7 4 3
//0834624:2 3 7 0 5 6 4 1 8 9
//0870912:2 4 6 8 7 3 0 1 5 9
//0907200:2 5 6 3 4 1 0 7 8 9
//0943488:2 6 5 4 1 7 3 0 8 9
//0979776:2 7 4 5 8 9 6 1 0 3
//1016064:2 8 3 7 5 6 4 0 1 9
//1052352:2 9 0 8 7 3 6 4 5 1
//1088640:3 1 2 0 4 5 6 7 8 9
//1124928:3 1 9 4 6 7 0 5 8 2
//1161216:3 2 8 5 1 9 6 7 4 0
//1197504:3 0 7 2 5 6 4 1 8 9
//1233792:3 4 6 8 7 0 2 1 5 9
//1270080:3 5 6 0 4 1 2 7 8 9
//1306368:3 6 5 4 1 7 0 2 8 9
//1342656:3 7 4 5 8 9 6 1 2 0
//1378944:3 8 0 7 5 6 4 2 1 9
//1415232:3 9 2 8 7 0 6 4 5 1
//1451520:4 1 2 3 0 5 6 7 8 9
//1487808:4 1 9 0 6 7 3 5 8 2
//1524096:4 2 8 5 1 9 6 7 0 3
//1560384:4 3 7 2 5 6 0 1 8 9
//1596672:4 0 6 8 7 3 2 1 5 9
//1632960:4 5 6 3 0 1 2 7 8 9
//1669248:4 6 5 0 1 7 3 2 8 9
//1705536:4 7 0 5 8 9 6 1 2 3
//1741824:4 8 3 7 5 6 0 2 1 9
//1778112:4 9 2 8 7 3 6 0 5 1
//1814400:5 1 2 3 4 0 6 7 8 9
//1850688:5 1 9 4 6 7 3 0 8 2
//1886976:5 2 8 0 1 9 6 7 4 3
//1923264:5 3 7 2 0 6 4 1 8 9
//1959552:5 4 6 8 7 3 2 1 0 9
//1995840:5 0 6 3 4 1 2 7 8 9
//2032128:5 6 0 4 1 7 3 2 8 9
//2068416:5 7 4 0 8 9 6 1 2 3
//2104704:5 8 3 7 0 6 4 2 1 9
//2140992:5 9 2 8 7 3 6 4 0 1
//2177280:6 1 2 3 4 5 0 7 8 9
//2213568:6 1 9 4 0 7 3 5 8 2
//2249856:6 2 8 5 1 9 0 7 4 3
//2286144:6 3 7 2 5 0 4 1 8 9
//2322432:6 4 0 8 7 3 2 1 5 9
//2358720:6 5 0 3 4 1 2 7 8 9
//2395008:6 0 5 4 1 7 3 2 8 9
//2431296:6 7 4 5 8 9 0 1 2 3
//2467584:6 8 3 7 5 0 4 2 1 9
//2503872:6 9 2 8 7 3 0 4 5 1
//2540160:7 1 2 3 4 5 6 0 8 9
//2576448:7 1 9 4 6 0 3 5 8 2
//2612736:7 2 8 5 1 9 6 0 4 3
//2649024:7 3 0 2 5 6 4 1 8 9
//2685312:7 4 6 8 0 3 2 1 5 9
//2721600:7 5 6 3 4 1 2 0 8 9
//2757888:7 6 5 4 1 0 3 2 8 9
//OK 0:
//2761728:7 6 5 9 8 0 1 2 4 3
// 9567
//+1085
//---------
//10652
//OK 1:
//2761729:7 6 5 9 8 0 1 2 3 4
// 9567
//+1085
//---------
//10652
//2794176:7 0 4 5 8 9 6 1 2 3
//2830464:7 8 3 0 5 6 4 2 1 9
//2866752:7 9 2 8 0 3 6 4 5 1
//2903040:8 1 2 3 4 5 6 7 0 9
//2939328:8 1 9 4 6 7 3 5 0 2
//2975616:8 2 0 5 1 9 6 7 4 3
//3011904:8 3 7 2 5 6 4 1 0 9
//3048192:8 4 6 0 7 3 2 1 5 9
//3084480:8 5 6 3 4 1 2 7 0 9
//3120768:8 6 5 4 1 7 3 2 0 9
//3157056:8 7 4 5 0 9 6 1 2 3
//3193344:8 0 3 7 5 6 4 2 1 9
//3229632:8 9 2 0 7 3 6 4 5 1
//3265920:9 1 2 3 4 5 6 7 8 0
//3302208:9 1 0 4 6 7 3 5 8 2
//3338496:9 2 8 5 1 0 6 7 4 3
//3374784:9 3 7 2 5 6 4 1 8 0
//3411072:9 4 6 8 7 3 2 1 5 0
//3447360:9 5 6 3 4 1 2 7 8 0
//3483648:9 6 5 4 1 7 3 2 8 0
//3519936:9 7 4 5 8 0 6 1 2 3
//3556224:9 8 3 7 5 6 4 2 1 0
//3592512:9 0 2 8 7 3 6 4 5 1
//total count:3628800
//OKcount:2
//
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266046.html
標籤:C++ 語言
上一篇:有大佬幫忙看一下嘛
下一篇:小白菜鳥的學習之路
