📄 8-2-10.c
字号:
/*中国系统分析员顾问团,http://www.csai.cn*/
/*程序员下午考试指南书籍源码*/
#include <stdio.h>
#define N 6
int A,B,C,D,E,F;
int *pt[ ] = {&A,&B,&C,&D,&E,&F};
main( ) {
int b[N+1], j, k, c=0; /* c为找到的解的计数器 */
for (j=1;j<=N;j++) b[j] = 0; /* 预置6个数均未被选用标志 */
k = 0; j = 1;
while (1) {
if (!b[j] ) {
b[*pt[k] = j ] = 1; /* 登录选定的数,并置该数已被选用标志 */
if (k < N-1) { /* 准备为第 k+1 个数选择整数 */
k++; j = 1;
continue;
}
if (A+B+C == C+D+E && A+B+C == E+F+A) {
/* 测试6个数是否满足要求,满足是解,就输出 */
printf ("%d\n\t\t%6d\n\t\t%4d%4d\n\t\t%2d%4d%4d\n\n",
++c,A,B,F,C,D,E);
scanf ("%*c"); /* 输出一个解后,按回车输出下一个解 */
}
do { /* 回溯 */
b[*pt[k--]] = 0;
if (k<0) break;
for (j=*pt[k]+1; j<=N && b[j]; j++); /* 寻找第k个数的可用数 */
if (j<=N ) break;
} while (1);
if ( k < 0 ) break; /* 已穷尽所有可能的选择 */
b[*pt[k]] = 0; /* 清除原先所选用的数的标志 */
j =*pt[k]+1; /* 调整第k个数可选用的数 */
}
else
while (++j<=N&&b[j]); /* 调整 */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -