⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8-2-10.c

📁 2005软件工程师考试下午编程题源代码
💻 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 + -