正文

残缺数问题2007-05-03 19:33:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/25513.html

分享到:

// 这是QQ群里某网友提出的问题,贴出我的代码,我想应该找完了 /*  用 0,1,2,3,4,5,6,7,8,9 填写 [][][]+[][][]=[][][][] 使对应的加法正确。** 首先可以确定 1 的位置[1][][][]因为每个数字只能用一次,所以每两个数字** 相加如果所得结果模 10 后的数字或者加 1(有进位时)后的数字已经使用过** 则这两个数不不能填在两个加数相同的位置上。** 例如:2+3=5,如果取 2,3 时数字 5 没有使用则可以考虑将2 3 5这三个数填** 入([][][2]+[][][3]=[1][][][5]) 代码如下:(主要用了递归的思想) */ #include <stdio.h>#include <string.h> struct stack{       int a;        int b;         int c; int j;}; struct stack stk[4] =  { 0 };int          digit[] = { 0,1,2,3,4,5,6,7,8,9 }; void get(int d,int *status){ int i,j,sum = 0,saveSum = 0;  if(d == 3){  if(stk[3].j == 1){   printf( "%d%d%d+%d%d%d=1%d%d%d\n" ,    stk[2].a,stk[1].a,stk[0].a,    stk[2].b,stk[1].b,stk[0].b,    stk[2].c,stk[1].c,stk[0].c  );  }  return; } for(sum = 0,i = 2; i < 9; i++){  if(status[i] != -1){    sum += status[i];   status[i] = -1;   stk[d].a = i;   for(j = 2; j < 10; j++){    if(status[j] != -1){     saveSum = sum;     sum += status[j];     status[j] = -1;     stk[d].b = j;     if(status[(sum+stk[d].j)%10] != -1){      stk[d].c = (sum+stk[d].j)%10;      stk[d+1].j = (sum+stk[d].j) / 10;      status[(sum+stk[d].j)%10] = -1;      get(d+1,status);      status[(sum+stk[d].j)%10] = (sum+stk[d].j)%10;     }     sum = saveSum;     status[j] = j;    }   }   status[i] = i;   sum = 0;  } }} int main(){ digit[1] = -1;    /* 1 的位置已经确定     */ get(0,digit);    /* 递归填写加数,从个位开始 */ return 0;} // 运行结果 342+756=1098742+356=1098352+746=1098752+346=1098432+657=1089632+457=1089452+637=1089652+437=1089423+675=1098623+475=1098473+625=1098673+425=1098743+859=1602843+759=1602753+849=1602853+749=1602473+589=1062573+489=1062483+579=1062583+479=1062324+765=1089724+365=1089364+725=1089764+325=1089624+879=1503824+679=1503264+789=1053764+289=1053674+829=1503874+629=1503284+769=1053784+269=1053425+673=1098625+473=1098475+623=1098675+423=1098325+764=1089725+364=1089365+724=1089765+324=1089346+752=1098746+352=1098356+742=1098756+342=1098426+879=1305826+479=1305246+789=1035746+289=1035476+829=1305876+429=1305286+749=1035786+249=1035437+652=1089637+452=1089457+632=1089657+432=1089437+589=1026537+489=1026347+859=1206847+359=1206357+849=1206857+349=1206487+539=1026587+439=1026  

阅读(2629) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册