news 2026/4/16 8:10:40

排列问题求解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
排列问题求解

1. 要求

将1~9填在图中的a0~a8的位置,要求三边4个数相加的和相等,并且分别实现(1)三
边4个数相加的和要最小;(2)三边4个数相加的和要最大。

2. C程序代码

#include <stdio.h> #include <stdlib.h> #define GS 9 #define CHUZHI {1, 2, 3, 4, 5, 6, 7, 8, 9} void pailie(int *, unsigned ); void shuchu(int *, unsigned ); void jiaohuan(int *, int *); int NUMS=0; /* 满足三边4个数相加的和相等的排列数目 */ int yqmin9[GS]={0}; /* 三边4个数相加的和相等且和最小的一组排列 */ int yqmax9[GS]={0}; /* 三边4个数相加的和相等且和最大的一组排列 */ int min=30,max=10; /* 三边4个数相加的和相等且和最小的数及最大的数 */ int main( ) { int yqz[GS]=CHUZHI; pailie(yqz, GS); shuchu( yqmin9, GS ); shuchu( yqmax9, GS ); printf("\n%d %d %d\n",NUMS,min,max); return 0; } // 对 yq 中的后 pljg 几个数据进行全排列 void pailie ( int * yq , unsigned pljg ) { unsigned bjh = GS - pljg , jh ; // 被交换和交换元素的下标 int i; if ( pljg==1 ){ if(((yq[0]+yq[1]+yq[2]+yq[3])==(yq[3]+yq[4]+yq[5]+yq[6])) && ((yq[0]+yq[1]+yq[2]+yq[3])==(yq[0]+yq[6]+yq[7]+yq[8]))){ if(min>(yq[0]+yq[1]+yq[2]+yq[3])) { min=(yq[0]+yq[1]+yq[2]+yq[3]); for(i=0;i<9;i++) yqmin9[i]=yq[i]; } if(max<(yq[0]+yq[1]+yq[2]+yq[3])){ max=(yq[0]+yq[1]+yq[2]+yq[3]); for(i=0;i<9;i++) yqmax9[i]=yq[i]; } NUMS++; } } for (jh = bjh ; jh < GS ; jh ++) { jiaohuan ( yq + bjh , yq + jh ) ; // 交换 pailie ( yq , pljg -1 ) ; // 对后面 pljg-1 个全排列 jiaohuan ( yq + bjh , yq + jh ) ; } } // 输出 void shuchu( int *p , unsigned n ) { unsigned i ; for ( i = 0 ; i < n ; i++ ) { printf("%d",p[i]); } putchar(' '); } // 交换p1和p2所指向对象的值 void jiaohuan(int * p1, int * p2) { int tmp; tmp = *p1; *p1 = *p2; *p2 = tmp; }

3. 输出结果

149357286 726851943
864 17 23

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 11:36:08

快速理解ESP32定时器在Arduino中的用法

从“不准”到“稳准狠”&#xff1a;一个嵌入式老手的ESP32定时器实战手记 你有没有遇到过这样的场景&#xff1f; 在Arduino里用 millis() 做10ms LED闪烁&#xff0c;结果示波器一测——高低电平时间偏差800μs&#xff1b; 想给I2S音频采样加个同步触发&#xff0c;结果…

作者头像 李华
网站建设 2026/4/13 3:44:38

手把手教你处理NX12.0捕获到的C++异常

NX 12.0 C++ 异常处理实战手记:一个模具厂工程师的踩坑与破局之路 去年冬天,我在某德系汽车模具厂驻场支持时,遇到一个反复出现的“幽灵问题”:用户点击一个自定义的“自动分模面生成”命令后,NX 突然弹出那个熟悉的红色对话框——“An exception has occurred…”,接着…

作者头像 李华
网站建设 2026/4/3 5:32:49

Windows任务栏集成Screen to Gif方法详解

任务栏上的GIF引擎:把 Screen to Gif 变成你桌面的“快门键” 你有没有过这样的时刻——刚发现一个UI交互Bug,想立刻录下来发给开发同事,结果手忙脚乱打开文件夹、双击 ScreenToGif.exe 、等它加载、再切回浏览器……等你终于框好区域按下录制键,那个转瞬即逝的动画状态…

作者头像 李华
网站建设 2026/4/10 20:53:30

Vivado2025针对UltraScale+的功耗分析工具图解说明

Vivado 2025 功耗分析实战手记:在 UltraScale+ 上真正“看见”并“控制”功耗 你有没有遇到过这样的场景? 项目进入板级调试阶段,FPGA表面温度计突然跳到 92C,风扇全速狂转;电源轨电流飙升至 4.8A,超出 DC-DC 模块额定值;红外热像仪一扫,CLB 区域一片刺眼的亮红——可…

作者头像 李华
网站建设 2026/4/3 1:47:46

OBD诊断命令(PID)使用图解说明

OBD诊断命令(PID)实战手记:从抓包看懂ECU在说什么 你有没有过这样的经历——把OBD-II诊断仪插进车子,点开APP,屏幕上跳着“发动机转速:0 rpm”、“冷却液温度:128C”、“空燃比:1.02”,但心里却隐隐发虚:这些数字真是ECU原汁原味吐出来的?还是APP自己猜的?当客户问…

作者头像 李华
网站建设 2026/4/5 18:46:27

MISRA C++静态检查工具在汽车项目的配置指南

MISRA C++静态检查:不是打勾,是给C++装上安全刹车 你有没有遇到过这样的场景? 一个ASIL-B级的电机控制模块,在HIL测试中一切正常,量产半年后突然在低温启动时偶发复位——日志里只有一行 SIGSEGV ,堆栈早已被冲毁。最后发现,是某处 std::vector::operator[] 越界访…

作者头像 李华