- 积分
- 322
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|

楼主 |
发表于 2008-10-2 09:45:38
|
显示全部楼层
鄙人以简陋的C语言写的穷举法计算的程序。- #include "stdio.h"
- #include "malloc.h"
- #include "memory.h"
- int dd[10];
- typedef struct
- {
- void *next;
- int d1;
- int d2;
- int d3;
- }DD_SS;
- DD_SS *dstop=NULL;
- void addToDS(int d1, int d2, int d3)
- {
- DD_SS *ds=malloc(sizeof(DD_SS));
- memset(ds, 0, sizeof(DD_SS));
- ds->d1=d1;
- ds->d2=d2;
- ds->d3=d3;
- if(!dstop)
- dstop=ds;
- else
- {
- DD_SS *dsn=dstop;
- dstop=ds;
- ds->next=dsn;
- }
- }
- void freeDS(void)
- {
- DD_SS *ds=dstop;
- dstop=NULL;
- while(ds)
- {
- DD_SS *dsn=ds->next;
- free(ds);
- ds=dsn;
- }
- }
- int isExist(int d1, int d3)
- {
- DD_SS *ds=dstop;
- while(ds)
- {
- if((ds->d3==d3)&&((ds->d1==d1)||(ds->d2==d1)))
- return 0;
- ds=ds->next;
- }
- return 1;
- }
- int checkdd(void)
- {
- int i;
- int j;
- int k=0;
- for(i=0;i<10;i++)
- {
- k=0;
- for(j=0;j<10;j++)
- {
- if((dd[j]==i)&&(k!=0))
- return 0;
- if(dd[j]==i)
- k++;
- }
- }
- return 1;
- }
- void do_x(void)
- {
- int i;
- int j;
- int k;
- for(i=203;i<987;i++)
- {
- for(j=987;j>203;j--)
- {
- k=i+j;
- if(k>=1000)
- {
- dd[0]=i/100;
- dd[1]=(i%100)/10;
- dd[2]=i%10;
- dd[3]=j/100;
- dd[4]=(j%100)/10;
- dd[5]=j%10;
- dd[6]=k/1000;
- dd[7]=(k%1000)/100;
- dd[8]=((k%1000)%100)/10;
- dd[9]=k%10;
- if((checkdd())&&(isExist(i, k)))
- addToDS(i, j, k);
- }
- }
- }
- }
- int main(void)
- {
- FILE *fp;
- int i;
- DD_SS *ds;//=dstop;
- for(i=0;i<10;i++)
- dd[i]=0;
- do_x();
- ds=dstop;
- i=0;
- fp=fopen("res.txt", "a");
- while(ds)
- {
- i++;
- printf("%d+%d=%d\n", ds->d1, ds->d2, ds->d3);
- fprintf(fp, "%d+%d=%d\n\r", ds->d1, ds->d2, ds->d3);
- ds=ds->next;
- }
- printf("Total: %d\n", i);
- fprintf(fp, "Total: %d\n\r", i);
- fclose(fp);
- freeDS();
- }
复制代码 |
|